
1、大数就是位数多,数值大的意思。通常来说c语言里的基本数据类型范围是有限的,如long型的最大只能表示几十亿,几十亿也就11位数字长弯拍度而已。如果用100长的数组表示,假设数组一个埋激羡元素存数字的一位,那么总位数可以达到100位,这是基本数据类型无法表示的。
2、例程:
#include"stdio.h"int getlength(char a[]){
int i=0
while(a[i])
i++
return i
}/*返回字符串的长度*/
int chartoint(char a){
return a-48
}/*将字符编程整形*/
void creatarray(char a[],char b[]){
printf("请输入第一个数:")
scanf("%s",a)
printf("请输入第二个数:")
scanf("%s",b)
}/*创建数组*/
void go(char a[],char b[],int s[]){
int alength=getlength(a)
int blength=getlength(b)
int i=alength-1
int j=blength-1
int k/*s数组下标*/
int slength
if(alength>blength)
slength=alength
else
slength=blength
k=slength
while(i>=0&&j>=0)
s[k--]=chartoint(a[i--])+chartoint(b[j--])
铅埋while(i>=0)
s[k--]=chartoint(a[i--])
while(j>=0)
s[k--]=chartoint(b[j--])
k=slength
while(k>=2){
if(s[k]>=10){
s[k-1]++
s[k]-=10
}
k--
}
printf("两数之和为:")
if(s[1]>=10){
s[0]=1
s[1]-=10
for(i=0i<=slengthi++)
printf("%d",s[i])
}
else{
for(i=1i<=slengthi++)
printf("%d",s[i])
}
printf("\n")
}
void main(){
char a[1000],b[1000]
int s[1000]
int lab
lab1: creatarray(a,b)
go(a,b,s)
printf("请输入1继续(想退出按其他数字键):")
scanf("%d",&lab)
if(lab==1)
goto lab1
}
楼主的意思是数组的每个元素只可能是0-9之间的数?除数怎样?也用数组表示?或者简单的int?如果全部转换为减法运算比较麻烦,也许就是要编程实现小学除法的具体步骤?从被除数的最高位依次和除数比较,用另外一个数组保存当前比较值,另外用一个数组保存余数,当然还需要一个数组保存商。在运算过程中不断更新这三个数组。历判尺
举个例子吧,也许有点帮助。
被除数冲耐 int d[5] = {1,2,3,4,5}// 表示 d = 12345
除数 int x[2] = {6,7} // 同肢高样 x = 67
商 int q[5] = {0} // 初始化
余数 int r[2] = {0} // 初始化
当前值 int c[3] = {0} //初始化
(1) 更新 c[3] = {0,0,1}, q[5] = {0,0,0,0,0}, r[2] = {0,1}
(2) 更新 c[3] = {0,1,2}, q[5] = {0,0,0,0,0}, r[2] = {1,2}
(3) 更新 c[3] = {1,2,3},q[5] = {0,0,0,0,1},r[2] = {5,6}
(4) 更新 c[3] = {5,6,4},q[5] = {0,0,0,1,8},r[2] = {2,8}
(5) 更新 c[3] = {2,8,5},q[5] = {0,0,1,8,4},r[2] = {1,7};
(6) d 没有更多的位,DONE。
结果:商184, 余数17。
当然要求具体每一步如何更新需要自己定义或转化。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)