C语言编程:100以内的进位加法和借位减法?

2020-07-05

C语言编程:100以内的进位加法和借位减法?


:直接生成两个两位随机数,应简单些。#include "stdafx.h"#include #include using namespace std;int main(){ int a, b,n=0; srand((unsigned int)time(NULL)); cout << "页数 "; cin >> n; while (n) {cout << "姓名:" << " " << "班级:" << endl;for (int i = 0;i < 17;i++){for (int j = 0;j < 2;j++){a = rand() % 99 + 1;b = rand() % 99 + 1;if (a > b && ((a - a / 10 * 10) < (b - b / 10 * 10)))cout << a << "-" << b << "= ";else if (((a - a / 10 * 10) + (b - b / 10 * 10)) > 9 && ((a / 10 + b / 10) < 9))cout << a << "+" << b << "= ";elsej--;}cout << endl;}n--;cout << endl; } system("pause"); return 0;}
代码文#include "stdio.h"#include #include "time.h"int main(int argc,char *argv[]){ int i,a,b,x,y,n; printf("How many pages... "); if(scanf("%d",&n) && n<1)return 0; srand((unsigned)time(NULL)); while(n--){printf("班级: 姓名: 学号: 时 ");for(i=0;i<17;i++){if(rand()&1){a=10*(x=rand()%9)+(y=rand()%9+1);b=10*(rand()%(9-x))+9-rand()%y;printf("%2d+%2d=",a,b);}else{a=10*(x=rand()%9+1)+(y=rand()%9);b=10*(rand()%x)+rand()%(9-y)+y+1;printf("%2d-%2d=",a,b);}printf(" ");if(rand()&1){a=10*(x=rand()%9)+(y=rand()%9+1);b=10*(rand()%(9-x))+9-rand()%y;printf("%2d+%2d= ",a,b);}else{a=10*(x=rand()%9+1)+(y=rand()%9);b=10*(rand()%x)+rand()%(9-y)+y+1;printf("%2d-%2d= ",a,b);}} } return 0;}

本回答被提问者采纳
用C语言做大数加法,怎么计算进位
个数用倒过来存放 比如567 +789
变成765+987
然后两个数组就
a[]={7,6,5};
b[]={9,8,7};
对应的相加变为c数组
c[] ={7+9,6+8,5+7};
变为161412
然后位16留下6,前面进一位14变为15变为 6 1512
再看中间15留下5,前面进一位12变为13,变为 6 5 13
再看 13留下3,向前进一位 变为1,那么最后变为6 5 3 1
最后倒过来,结果就是1356
for (i = 0; i < M; i++)
{
c1[i] += (a1[i] + b1[i]) % 10;
c1[i + 1] += (a1[i] + b1[i]) / 10;
}
这是处理进位的代码
用C语言做大数加法,怎么计算进位?
这个只能字来解决,还需符串来存个数字
char a[100],b[100],c[100];
int i,t,l1,l2,l3;
gets(a);
gets(b);
//反序
l1=strlen(a);
for(i=0;i<=l1/2;i++)
{
t=a[i]-'0';
a[i]=a[l-i]-'0';
a[i-i]=t;
}
l2=strlen(b);
for(i=0;i<=l2/2;i++)
{
t=b[i]-'0';
b[i]=b[l-i]-'0';
b[i-i]=t;
}
l3=l1>l2?l1:l2;
c[1]=a[1]+b[1];
for(i=1;i<=l3;i++)
{
if(c[i-1]/10==1)
{
c[i-1]%=10;
c[i]=(a[i]+b[i])%10+1;
}
else
c[i]=(a[i]+b[i]);
}
if(c[i-1]/10==1)
{
c[i-1]%=10;
c[i]=1;
c[i+1]='\0';
}
else
c[i]='\0';
l3=strlen(c);
for(i=l3;i>=0;i--)
printf("%c",c[i]);可以把大数分段,532111分成532*100+111,先打印532,在打印111.把数字当成字符计算本回答被提问者采纳#include
#include
int main()
{
int i,t,j=1,n,len,k;
char sum[1009],sa[1009],sb[1009];
scanf("%d",&t);
getchar();
while(t--)
{
for(i=0;i<1009;i++)
sum[i]='0';
scanf("%s%s",sa,sb);
len=strlen(sa);
for(i=len-1,k=0;i>=0;i--,k++)
{
sum[k]=sum[k]-'0'+sa[i];
n=k;
while(sum[n]>'9')//进
{
sum[n+1]=sum[n+1]+(sum[n]-'0')/10;
sum[n]=(sum[n]-'0')%10+'0';
n++;
}
}
len=strlen(sb);
for(i=len-1,k=0;i>=0;k++,i--)
{
sum[k]=sum[k]-'0'+sb[i];
n=k;
while(sum[n]>'9')//
{
sum[n+1]=sum[n+1]+(sum[n]-'0')/10;
sum[n]=(sum[n]-'0')%10+'0';
n++;
}
}
printf("Case %d:\n%s + %s = ",j,sa,sb);
j++;
for(i=1008;sum[i]=='0';i--);
for(;i>=0;i--)
printf("%c",sum[i]);
printf("\n");
if(t>0)
printf("\n");
}
return 0;
}位数%位值

做取余运算
C语言,用字符实现一位整数的加法。当两个整数的和大于9时,其进位怎么表示出来?

chara,b,c;
scanf("%c%c",&a,&b);
c=a+b-'0';
if(c>'9')
c-=10;
printf("%c ",c);追问

谢谢帮助,我找到问题了,我这种算法没错,是另外一个不可原谅的失误,我只贴出了一部分代码,错的没贴出来。