PAT 乙级1002题

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:

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

输出格式:

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

样例:">样例:">输入样例:

1234567890987654321123456789

输出样例:

yi san wu

自己写成了这样 

#include <stdio.h>
#include <vector>
#include<iostream>
using namespace std;
int printN(int c){
   switch(c){
   
    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;
    case 0:cout<<"ling";
    break;
}
    return 0;
}
int main(){
	int a,i,count=0;
    int ans=0;
    vector<int> vi;
    scanf("%d",&a);
    while(a){
          ans=a%10;
        count=count+ans;
        a=a/10;
    }
    printf("%d\n",count);

     
      while(count){
      	ans=count%10;
      	vi.push_back(ans);
      	count=count/10;
	  }
	  for(i=vi.size()-1;i>=0;i--){
	  	if(i!=0){
	  		printN(vi[i]);
	  		 cout<<" ";
		  }
		  else{
		  	 printN(vi[i]);
		  	
		  }
      
  }
      return 0;
}

结果测试数据报错为48,而自己拿345测又十分正常

 

 经过调试发现问题,输入的正整数太长,如图,原本该等于

1234567890987654321123456789

的a被认为是1668904725,而且哪怕从int改成long long型也报错,看了好几篇回答发现只有用数组存储这个数才不会报错

 如这篇文章:

(92条消息) C语言——PAT_1002.读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字_Eowyn懒懒懒的博客-优快云博客_pat乙级1002c语言

或者这篇用了getchar():

(93条消息) C语言——PAT_1002.读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字_Eowyn懒懒懒的博客-优快云博客_pat乙级1002c语言

下面这位应该是遇到跟我一样的问题了 

(92条消息) PAT(1002)读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字,前面每位之后有空格,最后一位后面没有空格_Judy18的博客-优快云博客 于是借鉴了第一位的字符数组,我最后写成了:

#include <stdio.h>
#include <vector>
#include<iostream>
using namespace std;
int printN(int c){
   switch(c){
   
    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;
    case 0:cout<<"ling";
    break;
}
    return 0;
}
int main(){
	char a[100];

   int  i,j=0,count=0;
    int ans=0;
    vector<int> vi;
    scanf("%s",&a);
    while(a[j]!='\0'){
    	
    	count+=a[j]-'0';
		j++;

       
    }
    printf("%d\n",count);

     
      while(count){
      	ans=count%10;
      	vi.push_back(ans);
      	count=count/10;
	  }
	  for(i=vi.size()-1;i>=0;i--){
	  	if(i!=0){
	  		printN(vi[i]);
	  		 cout<<" ";
		  }
		  else{
		  	 printN(vi[i]);
		  	
		  }
      
  }
      return 0;
}

加油,还有两个月冲啊~

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dzy三棱镜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值