
有一个运行错误不知道什么意思,感觉差不了多少反正就一分。
我的总结:
1. 题目中的 n 可以非常大,n 可以有100位之多。很显然用 int 型不够的,
甚至 long long int 都是不够的。所以我去b站找视频发现可以用数组来存储数据。
(大数加法 B站号 BV1jE411j7xn)
char a[29], b[29];
int sum=0,i;
scanf("%s",a);
for(sum=0,i=strlen(a)-1; i>=0; i--,sum++)
{ b[sum]=a[i]-'0'; }
这一串代码意思就是:先定义数组然后输入字符123456(它们在ASKII里面都有自己的值). 但我们要的是数字不是字符,所以
需要 a[i] - '0' 这样 b[sum] 里面存的就是数字了。
2.接下来就是数字的排序了,(将数字的前后颠倒531->135)
while(sum>0){
sum/=10;
j++; }
for(j;j>0;j--){
k=k+temp%10;
temp/=10;
for(i=1;i<j;i++){
k*=10;}
sum=sum+k;
k=0;}
第一个whlie 语句判断有数字有 J 位。
第一个for 循环
把每一位的值提出来(用题目答案来举例子)
当 J = 3时 k = 0 + 531%10 = 1
第二个个for循环
判断应该乘以几遍10
i=1;i<3; i++
k乘以两遍10,k=100
sum是最终的值,把每一次循环出来的 k 值加起来就行了(k每次都要等于一遍 0).
3.接着就是一个小小的Switch语句来选择输出那个数字拼音,和一个if 语句判断要不要输出空格。
while(sum>0) {
i=sum%10;
switch (i) {
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;
default:
break;
}
sum=sum/10;
if(sum!=0){
printf(" ");
}
i=0;
}
所有代码:
#include <stdio.h>
#include <string.h>
int main() {
char a[29], b[29];
int sum=0,i, n,temp,j=0,k=0;
scanf("%s",a);
for(sum=0,i=strlen(a)-1; i>=0; i--,sum++) {
b[sum]=a[i]-'0';
}
i=0;
sum=0;
for(i=0; i<strlen(a); i++) {
sum+=b[i];
}temp=sum;
while(sum>0){
sum/=10;
j++;
} sum=0;
for(j;j>0;j--){
k=k+temp%10;
temp/=10;
for(i=1;i<j;i++){
k*=10;}
sum=sum+k;
k=0;}
i=0;
while(sum>0) {
i=sum%10;
switch (i) {
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;
default:
break;
}
sum=sum/10;
if(sum!=0){
printf(" ");
}
i=0;
}
}
初上大一是新手,刚学习C语言还不久。想写点题来练练手,希望可以来交流。
(大学老师真不像初中高中,老师比我还忙╮(╯▽╰)╭。每次问题只能在网上解答,看解析看得我是累得很,真希望可以交流一下病情)
C++ AC版 2022 / 11 / 28
c++真方便!
#include <bits/stdc++.h>
#include <iostream>
#include <stdlib.h>
#include <algorithm>
#include <deque>
using namespace std;
int main()
{
string s;
cin >> s;
int ans;
for (int i = 0; i < s.size(); i++)
{
ans += s[i] - '0';
}
string temp = to_string(ans);//int 型 转字符型
for (int i = 0; i < temp.size(); i++)
{
switch (temp[i])
{
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;
default:
break;
}
if (i == temp.size() - 1)
break;
printf(" ");
}
system("pause");
}
这篇博客介绍了如何使用C语言处理大数相加的问题,通过数组存储大数并进行反转排序,然后将计算结果转换为中文数字发音。博主分享了学习C语言的心得,并对比了C++版本的简洁之处。

【c++更新版】&spm=1001.2101.3001.5002&articleId=122238472&d=1&t=3&u=fe163d1c4cab41e2a6d832d7c8183abd)
3751

被折叠的 条评论
为什么被折叠?



