初学tc 怎么做一个20位数的加法啊?

vensionkdm 2004-08-26 04:28:52
我搜过了,没有tc的。帮帮忙!谢谢了!!!
...全文
193 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
vensionkdm 2004-09-01
  • 打赏
  • 举报
回复
不好意思啊!前几天搬家,一直没有上网,所以现在才结帖。
呵呵!
ftkghost 2004-08-28
  • 打赏
  • 举报
回复
呵呵 你看看发帖的时候 下面有教结贴
我也是新手,具体不太清楚,以后多多指教
vensionkdm 2004-08-28
  • 打赏
  • 举报
回复
谢谢小鹏啊!!呵呵
我第一次发帖的,怎么发分啊?
ftkghost 2004-08-27
  • 打赏
  • 举报
回复
用递归实现进位?
ftkghost 2004-08-27
  • 打赏
  • 举报
回复
多位的数字的四则运算具体方法也都差不多 有兴趣可以自己弄弄。
ftkghost 2004-08-27
  • 打赏
  • 举报
回复
费了那么多劲,楼主赏点分吧:)
ftkghost 2004-08-27
  • 打赏
  • 举报
回复
弄了半天总算弄出来了
我也是个菜鸟,以前学过C,现在学C++,C的相关函数忘得差不多了,用的方法比较复杂,如果有高手有简便些的方法,还望赐教,不胜感激。
以下是小弟编写的程序。

/*array数组存放数字*/
/*a0,a1分别是array[0][]array[1][]中接收数字有效位的数组下标*/
/*a2为array[2][]计算结果的起始位置定位*/
/*t用于进位时的计算*/

#include<stdio.h>
#include<conio.h>

int main()
{
/*防止20位数字相加结果为21位以及接收数字时接收到的回车*/
char array[3][21];
int i,a0,a1,a2,t=0;
/*数组初始化,由于引用数组时是调取数组地址下存储的内容,防止引用出错*/
for(i=0;i<21;i++)
{
array[0][i]='0';
array[1][i]='0';
array[2][i]='0';
}
printf("Please enter a number:\n");
for(i=0;i<21;i++)
{
array[0][i]=getchar(); /*接收数字*/
if(array[0][i]>'9'||array[0][i]<'0')
{
a0=i-1; /*最后一个接收到字符为回车*/
break; /*当接收到非字符时跳出循环*/
}
}
/*若数组接受的第一个字符非数字则报错并结束程序*/
if(array[0][0]>'9'||array[0][0]<'0')
{
printf("\aError!\n");
return 1;
}
a2=getchar(); /*防止最后接受到缓冲区中的回车作为下个数的第一个字符*/
printf("\nPlease enter another number:\n");
for(i=0;i<21;i++)
{
array[1][i]=getchar();
if(array[1][i]>'9'||array[1][i]<'0')
{
a1=i-1;
break;
}
}
if(array[1][0]>'9'||array[1][0]<'0')
{
printf("\aError!\n");
return 1;
}
a2=a0>=a1?a0:a1; /*a2取a0,a1中较大者*/
if(a0>a1) /*当a0>a1时array[1][]数字的位数不足,需要调整,方便计算*/
{
for(i=a0;i>=a0-a1;i--)
/*数字字符后移a0,a1相差的位数*/
array[1][i]=array[1][i-(a0-a1)];
/*不足的位以'0'补足*/
for(i=0;i<a0-a1;i++)
array[1][i]='0';
}
else if(a0<a1) /*原因同上*/
{
for(i=a1;i>=a1-a0;i--)
array[0][i]=array[0][i-(a1-a0)];
for(i=0;i<a1-a0;i++)
array[0][i]='0';
} /*a0=a1不必调整*/
for(i=a2;i>=0;i--) /*两数相加从最个位开始*/
{
/*'0'和'9'ASCII码为48和57,同位数字相加并且加上前一位的进位大于10时再进位,即t=1*/
/*由于循环1次过后t=0,从判断array[2][i+1](上一次循环的高位判断)为'1'则表示上一次循环已进位*/
/*用array[2][i+1]是防止结果最高为>10而造成数组越位*/
if(array[0][i]+array[1][i]+t>=106||array[2][i+1]=='1')
t=1;
/*每个字符本身ASCII码值减去48为数字本身的值,计算此次循环该位值*/
array[2][i+1]=array[2][i+1]+array[0][i]+array[1][i]-96-10*t;
/*下一位数字若进位增加t*/
array[2][i]=array[2][i]+t;
/*此次循环完成后进位判断的变量还原为0*/
t=0;
}
/*防止第一位输出'0'*/
if(array[2][0]=='1')
t=1;
printf("Result = ");
/*输出array[2][]下标1-t到a2+1的字符,防止输出多余的'0'*/
for(i=1-t;i<=a2+1;i++)
{
/*非数字跳出*/
if(array[2][i]<'0'||array[2][i]>'9')
break;
printf("%c",array[2][i]);
}
printf("\n");
return 0;
}

以上程序编译通过,测试了一下不同情况,都能计算出,把数组大小和循环中下标相关值修改后即使1000位数字相加也能计算。

loveliu0429 2004-08-27
  • 打赏
  • 举报
回复
刚才又看了看老谭,才知道为什么要问20位
看来为了考二级学的东西真是没用啊
loveliu0429 2004-08-27
  • 打赏
  • 举报
回复
楼上的谢了
偶是一直想着20位弄麻烦了
这是偶独自完成的第一段程序
所以不免太麻烦了,
不好意思
谢谢你的指教!
ftkghost 2004-08-27
  • 打赏
  • 举报
回复
楼上的仁兄 偶是对loveliu0429(lovelipei)说
不要会错意 我一会把20位的加法代码发上来
AllenFire 2004-08-27
  • 打赏
  • 举报
回复
说的跟20以内加减法一样...
ftkghost 2004-08-27
  • 打赏
  • 举报
回复
两位数的直接加就行了 有必要那么复杂吗?
ftkghost 2004-08-27
  • 打赏
  • 举报
回复
对了 在TC中double的数值范围是10的-307次方到10的308次方
直接把变量弄成double型的不就行了?
double a1,a2,a3;
scanf("%lf,%lf",&a1,&a2);
a3=a1+a2;
printf("%lf",a3);
不过由于有效位的问题,数字太大了会得到错误的结果。
loveliu0429 2004-08-27
  • 打赏
  • 举报
回复
偶为初学者,不知道你到底什么意思,
是不是要求两个数相加啊?
20位数偶没敢做,小写了一个两位数相加的,你看看,
应该思想差不多
#include "Stdio.h"
#include "Conio.h"

int main(void)
{int a,b,s;
int n,m,j,k;
do{
printf("please input two integers:\n");
scanf("%d%d",&a,&b);
}
while (a>99||b>99);
n=a%10;
m=a/10;
j=b%10;
k=b/10;
s=(n+j)%10+((m+k)%10+(n+j)/10)*10+(m+k)/10*100;
printf("s=%d",s);
getch();
return 0;
}
EagleTwenty 2004-08-27
  • 打赏
  • 举报
回复
用数组,并设一个进位寄存器……
我当时做过大数的连乘,5000的阶乘我这破赛扬I算了半分钟T_T
vensionkdm 2004-08-26
  • 打赏
  • 举报
回复
不好意思啊
我新来的,也不知道技术区和非技术区有什么区别

nodummy(某人马甲的马甲的马甲) 如果想要更好的语法支持,用C++的重载operator+就可以了

这道题要用tc作的啊
不过还是要谢谢你的
yangyi8111 2004-08-26
  • 打赏
  • 举报
回复
晕如果有进位怎么办,你没考虑清楚啊
nodummy 2004-08-26
  • 打赏
  • 举报
回复
这个东西怎么放到非技术区里面来了?建议BZ移到技术区

char arr[3][20];
for(int i=0;i<20;i++)
arr[2][i]=arr[1][i]+arr[0][i];

这个代码就OK咧,arr[0]和arr[1]是加数,arr[2]是结果

如果想要更好的语法支持,用C++的重载operator+就可以了
vensionkdm 2004-08-26
  • 打赏
  • 举报
回复

呵呵
能帮我写出程序来吗?
yangfanchina 2004-08-26
  • 打赏
  • 举报
回复
deal with ARRAY
加载更多回复(1)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧