机试准备
噩梦成真啊,说不想机试,机试不就来了嘛。
每天练个几道题,能不能过看缘分吧,太长时间没敲代码了。
1,basic难度
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
在写的过程中主要有一下几个问题:
(1)如何接收长度很长,并且每位要进行运算的正整数?
用Char数组进行接收,因为说数字不会超过10100,所以char数组定义101位
(2)如果接收的是字符,符合转化为对应的整数:
用a-'0' 即可转化为相应的数字
(3)如何取得整数的每位数字
对其进行模10运算,可以取得最低位的数值,之后将该数除以10,再取模,重复这个过程可以获得这个整数的每位数字的逆序,然后将其保存在数组中,从后往前输出
(4)使最后一个输出没有空格
当输出到最后一个,单独处理。
#include <iostream>
using namespace std;
void pinyin(int a)
{
switch(a)
{
case 0:
cout<<"ling";break;
case 1:
cout<<"yi";break;
case 2:
cout<<"er";break;
case 3:
cout<<"san";break;
case 4:
cout<<"si";break;
case 5:
cout<<"wu";break;
case 6:
cout<<"liu";break;
case 7:
cout<<"qi";break;
case 8:
cout<<"ba";break;
case 9:
cout<<"jiu";break;
default:
break;
}
}
int main()
{
char a[101];
cin >> a;
int sum = 0;
int i =0;//串的长度
//如何获得接收的字符串的长度:用char数组接收,直到不为零
//如何将接收的字符ASIIC码转化为对应的int值: a[i]-'0'
//如何取得多位整数的各个位:将多位整数对10取余
//最后无空格如何处理?
for(i=0; a[i]!='\0'; i++) //得到数组的和
{
a[i] = a[i]-'0';
sum = sum + a[i];
}
if(sum==0)
{
pinyin(sum);
}
//将和倒置移入数组
//cout<<sum<<endl;
int b[11];
int counter = 0;
while(sum!=0)
{
b[counter] = sum%10;
sum = sum/10;
counter++;
}
//cout<<counter;//几位数
for(int j =counter-1;j>=0;j--)
{
if(j!=0)
{
pinyin(b[j]);
cout<<" ";
}
else{
pinyin(b[j]);
}
}
return 0;
}
稳扎稳打才能取得最后的胜利

浙公网安备 33010602011771号