1002 写出这个数
一、采用JAVA进行题解
了解两个函数:
s.charAt(i)-'0'==digit
:charAt(i)是字符串中的第i个字符,s.charAt(i)就是S中的第i个字符,因为字符都是用ASCII码存储的,存储的是ASCII码值,用s.charAt(i)减去字符‘0’,就是用s.charAt(i)的码值减去‘0’的码值,得到的值刚好就是s中第i个字符的十进制值。所以该句是判断s中第i个字符的十进制值是否等于digit.
s.trim()
:去掉字符串前后空格
若使用整数,在计算各位求和时若碰到零就会停止,所以不建议采用整型输入,而转换为字符串输入。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
//读入数据为字符串格式
String line=sc.nextLine();
System.out.println(solution(line));
}
public static int getsum(String s){
int sum=0;
for(int i=0;i<s.length();i++){
//第i个字符对应的十进制值
sum=sum+s.charAt(i)-'0';
}
return sum;
}
public static String solution(String s){
if(s==null||s.equals("")){
return "";
}
int sum=getsum(s);
String result="";
while(sum!=0){
int k=sum%10;
sum=sum/10;
String temp=Transfer(k);
result=temp+" "+result;
}
return result.trim();
}
//将对应的数字转化成汉字拼音
public static String Transfer(int x){
String result="";
switch(x){
case 0:
result="ling";
break;
case 1:
result="yi";
break;
case 2:
result="er";
break;
case 3:
result="san";
break;
case 4:
result="si";
break;
case 5:
result="wu";
break;
case 6:
result="liu";
break;
case 7:
result="qi";
break;
case 8:
result="ba";
break;
case 9:
result="jiu";
break;
default:
break;
}
return result;
}
}
二、采用C++进行题解
#include<iostream>
#include<string>
using namespace std;
int main() {
int sum = 0;
string pinyin[10] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
string s;
cin >> s;
//求和
for (int i = 0; i < s.length(); i++) {
sum += s[i] - '0';
}
//to_string()用法:
string sum_s = to_string(sum);
for (int i = 0; i < sum_s.length(); i++) {
cout << pinyin[sum_s[i] - '0'];
if (i < sum_s.length() - 1)
cout << " ";
}
return 0;
}