您的位置:首页 > 其它

1002. 写出这个数 (20)

2017-10-05 17:58 260 查看
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。

输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

#include<stdio.h>

#define NUM 100

//返回输出的数之和
int Sum_of_num(const char *s)
{
int sum = 0;
while(*s != '\0')
{
sum += *s-'0';
s++;
}
return sum;
}
//返回输出数的位数
int Cnt_of_num(int sum)
{
int i = 10;
int cnt = 1;
while(sum/i != 0)
{
sum /= i;
cnt++;
}
return cnt;
}
//输出拼音
void Put_out_chi(int sum,int cnt,char s[][5],int *temp)
{
int i = cnt;
int j = sum; //存入sum值之后输出个位
while(cnt > 0)
{            //存入temp数组
*temp = sum%10;
sum /= 10;
temp++;
cnt--;
}
temp--;
cnt++;
while(cnt != i)
{               //依次输出到十位
printf("%s ",s[*temp]);
temp--;
cnt++;
}
printf("%s",s[j%10]);
}

int main()
{
char number[NUM];
char chinese[][5] = {"ling","yi","er","san","si","wu","liu",
"qi","ba","jiu"};
int temp[10];
scanf("%s",number);
int sum,cnt;

sum = Sum_of_num(number);
cnt = Cnt_of_num(sum);
Put_out_chi(sum,cnt,chinese,temp);

return 0;
}


核心函数:

void Put_out_chi(int sum,int cnt,char s[][5],int *temp)


由于用计算机来从最大位开始输出一个“不知道位数”比较难(我不知道怎么做~~),因此选择创建一个temp数组来依次存放从个位开始到最大位的值,之后再通过指针往前移动来输出拼音。由于格式的限制,则留下最后的个位单独输出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: