pat真题1002 写出这个数C语言解法和java解法
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
(1)c语言解法(因为c++相对c语言有某些地方方便一点,所以以下代码带有一点的特性,但仅仅需要会c语言就能看懂,代码需要后缀为cpp才能正常运行)。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void toPingyin(char a);
void addNumber(char m[]);
//addNumber()函数用来对数字求和
void addNumber(char m[]){
unsigned int i,j,sum=0; //sum应该初始化
char newNumber[4];
for(i=0;i<strlen(m);i++){ //利用strlen获得字符数组长度
sum+=((int)(m[i]-48)); //将字符型数字(ASCII码中0-9:48-57)转化为对应数字
}
/*可利用sprintf函数将数字转换成字符串*/
sprintf(newNumber,"%d",sum);
for(j=0;j<strlen(newNumber);j++){
toPingyin(newNumber[j]);
if(j<strlen(newNumber)-1)
printf(" ");
}
}
//利用switch函数得到每位数字的拼音
void toPingyin(char a){
switch(a-48){
case 0:printf("ling");break;
case 1:printf("yi");break;
case 2:printf("er");break;
case 3:printf("san");break;
case 4:printf("si");break;
case 5:printf("wu");break;
case 6:printf("liu");break;
case 7:printf("qi");break;
case 8:printf("ba");break;
case 9:printf("jiu");break;
}
}
int main(){
char m[100];
/*可利用scanf函数将读入数字转换成字符串*/
if(scanf("%s",m)==1)
addNumber(m);
printf("\n");
return 0;
}
//sprintf()函数和sscanf()函数相当于printf(),scanf()的升级版
(2)java实现
import java.util.Scanner;
public class Main {
//将输入的字符串转换为数字并加和(注意ASSCII与数字的转换)
//将所得的和(数字)转换为字符串以将每个小数字分解出来
static void addNumber(String numbers) {
int sum=0;
for(int i=0;i<numbers.length();i++) {
sum+=(int)(numbers.charAt(i)-48);
}
Integer int1=sum;
String stringNumber=int1.toString();
for(int i=0;i<stringNumber.length();i++) {
numberToPing(stringNumber.charAt(i));
if(i<stringNumber.length()-1)
System.out.printf(" ");
}
}
//利用switch函数输出每个数字对应的拼音
static void numberToPing(char a) {
switch(a-48) {
case 0: System.out.printf("ling"); break;
case 1: System.out.printf("yi"); break;
case 2: System.out.printf("er"); break;
case 3: System.out.printf("san"); break;
case 4: System.out.printf("si"); break;
case 5: System.out.printf("wu"); break;
case 6: System.out.printf("liu"); break;
case 7: System.out.printf("qi"); break;
case 8: System.out.printf("ba"); break;
case 9: System.out.printf("jiu"); break;
}
}
public static void main(String args[]) {
Scanner input=new Scanner(System.in);
String numbers;
numbers=input.next();
addNumber(numbers);
}
}
水平有限,大家发现问题请指出来,或者有好的代码可以分享出来,一起学习,谢谢!!