社区
新手乐园
帖子详情
初学tc 怎么做一个20位数的加法啊?
vensionkdm
2004-08-26 04:28:52
我搜过了,没有tc的。帮帮忙!谢谢了!!!
...全文
193
21
打赏
收藏
初学tc 怎么做一个20位数的加法啊?
我搜过了,没有tc的。帮帮忙!谢谢了!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
Bootstrap入门适合
初学
者
从基础讲起,既有理论讲解也有代码实战,非常适合
初学
者入门学习。 课程内容包括: 1. bootstrap概述 2. bootstrap全局样式 3. bootstrap插件 4. bootstrap...
C/C++基础入门
1 C++初识 给C++
初学
者的50个忠告 1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》;...3.看《The C++ Programming ...5.不要放过任何
一个
看上去很简单的小
Java基础知识笔记整理(零基础学Java)
以下是一名java
初学
者在自学过程中所整理的笔记,欢迎大家浏览并留言,若有错误的地方请大家指正。 java语言特性 简单性:相对于其他编程语言而言,java较为简单,例如:java不再支持多继承,C++是支持多继承的,多...
javascript第一天学习
一、Javascript简介 前端三层: HTML 结构层 从语义的角度描述页面结构 CSS 样式层 从装饰的角度描述页面的样式 JavaScript 行文层 从交互的角度描述页面的行为 1、Ja...
C语言基础知识归纳总结
C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性...上面的代码基本上是每
一个
C语言
初学
者所打的第
一个
程序代码,其中麻雀虽小五脏俱全。
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章