机试准备

噩梦成真啊,说不想机试,机试不就来了嘛。

每天练个几道题,能不能过看缘分吧,太长时间没敲代码了。

 

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; }

 

posted @ 2022-03-26 15:56  希望25分钟跑完5公里  阅读(41)  评论(0)    收藏  举报