用rand()产生随机数,rand()会产生从0到一个很大的数,我记不清了,反正很大。如果想出现100以内的,就用rand()%100。你可以定义三个int型整数,两个表示加或者减的对象,另一个标示加或者减,因为只要出现两种情况之一,所以可以用rand()%2,这样只会有0,1两种情况来标示加或者减。下面的就很容易了inta,b,i,c;for(i=0;i10;i++){a=rand()%100;b=rand()%100;c=rand()%2;if(c==0)//标示加法{printf("%d+%d=%d\n",a,b,a+b);}else{printf("%d-%d=%d\n",a,b,a-b);}}大致就这样,希望给你点帮助
网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了鹿寨免费建站欢迎大家使用!
#include stdio.h
#include stdlib.h
#include string.h
char a[1000],b[1000];
int c[1001];
int x,y,i,j,k;
int blen=0;
int alen=0;
char flag = '+';//用于减法标记负数
int Subtract(char *a, char *b, int len) { //为了避免代码重复,将共同的计算抽出写成函数
int i;
for (i=len-1; i=0; i--) {
if (a[i] b[i]) {
c[i] = a[i] + 10 - b[i];
b[i-1]++;
} else {
c[i] = a[i] - b[i];
}
}
return 0;
}
int Subtraction(){
for (i=0;i100;i++)
{
scanf("%c",b[i]);
if(b[i]=='\n')
break;
blen++;
}
printf("=");
if(alenblen)
{
x=(alen-blen);
for(i=blen-1;i=0;i--)
{
alen--;
b[alen]=b[i];
}
for (i=0;ix;i++)
b[i]='0';
alen=blen+x;
blen=alen;
} else if (blen alen) {
x=(blen-alen);
for(i=alen-1;i=0;i--)
{
blen--;
a[blen]=a[i];
}
for (i=0;ix;i++)
a[i]='0';
blen=alen+x;
alen=blen;
}
for (i=alen-1;i=0;i--) {
a[i]=a[i]-'0';
b[i]=b[i]-'0';
}
if (strcmp(a, b) 0) {
Subtract(a, b, alen);
}else {
flag = '-';
Subtract(b, a, alen);
}
return 0;
}
int Addition(){
for (i=0;i100;i++)
{ scanf("%c",b[i]);
if(b[i]=='\n')
break;
blen++;
}
printf("=");
if(alenblen)
{
x=(alen-blen);
for(i=blen-1;i=0;i--)
{
alen--;
b[alen]=b[i];
}
for (i=0;ix;i++)
b[i]='0';
alen=blen+x;
} else if (blen alen) {
x=(blen-alen);
for(i=alen-1;i=0;i--)
{
blen--;
a[blen]=a[i];
}
for (i=0;ix;i++)
a[i]='0';
blen=alen+x;
alen=blen;
}
for (i=alen-1;i=0;i--) {
a[i]=a[i]-'0';
b[i]=b[i]-'0';
if(c[i+1]+a[i]+b[i]=10)
{
c[i]=(c[i+1]+a[i]+b[i])/10;
c[i+1] = (c[i+1]+a[i]+b[i])%10;
}
else
{
c[i+1]+=(a[i]+b[i]);
}
}
return 0;
}
int main()
{
for (i=0;i100;i++)
a[i]=0;
for (i=0;i100;i++)
b[i]=0;
for (i=0;i101;i++)
c[i]=0;
for (i=0;i100;i++)
{
scanf("%c",a[i]);
if(a[i]=='+')
{
Addition();
goto output1;
}
if(a[i]=='-')
{
Subtraction();
goto output2;
}
alen++;
}
output1:
{
for (i=0;i=alen;i++)
printf("%d",c[i]);
return 0;
}
output2:
{
printf("%c", flag);
for (i=0;ialen;i++)
printf("%d",c[i]);
return 0;
}
}
代码运行结果:
123456789-12345
=+123444444
Terminated with return code 0
Press any key to continue ...
123456+111111
=0234567
Terminated with return code 0
Press any key to continue ...
1000000-1
=+0999999
Terminated with return code 0
Press any key to continue ...
1-1000000
=-0999999
Terminated with return code 0
Press any key to continue ...
//对你的代码作了! 希望有助于你的学习。
//把各位的数码存入字符数组中,注意ASCAII码的转换
#includestdio.h
#includestring.h
#include conio.h
int main()
{
int s,t,i,len1,len2;
char s1[30],s2[30],n1[30],n2[30],sum[31];
//将字符串以数码形式按倒序存储于新字符串中,便于计算
printf("input 2 num(小于10^40):\n");
scanf("%s%s",s1,s2);
len1=strlen(s1);
len2=strlen(s2);
t=0;
for(i=len1;i=0;i--)n1[t++]=s1[i-1]-48;
t=0;
for(i=len2;i=0;i--)n2[t++]=s2[i-1]-48;
//高位补0
if(len1len2)
{
n1[len1]=0;
for(i=len2;ilen1;i++)n2[i]=0;
}
if(len1len2)
{
n2[len2]=0;
for(i=len1;ilen2;i++)n1[i]=0;
}
//计算
t=0;
s=0;
for(i=0;i(len1len2?len1:len2);i++)
{
s=n1[i]+n2[i]+t;//s为数码之和
sum[i]=s%10; //sum[i]为该位上的数码
t=s/10;//t为进位
s=0;
}
//输出
putchar(10);
if(t0)
{
sum[i]=t;
for(s=i;s=0;s--)printf("%c",sum[s]+48);
}
else
{
for(s=i-1;s=0;s--)printf("%c",sum[s]+48);
}
getch();
}
class bigint //大整数
{
#define MAXWIDTH 100000
public:
int width;
char dig[MAXWIDTH];
bigint operator+(const bigint );
void display();
void set(const char*);
bigint();
};
void bigint::display()
{
for(int i=width-1;i=0;i--)
coutchar(dig[i]+'0');//必须进行类型转换
coutendl;
}
void bigint::set(const char*p)
{
int len=strlen(p);
int k=0;
for(int i=len-1;i=0;i--)
{
dig[k]=p[i]-'0';
k++;
}
width=len;
}
bigint bigint::operator + (const bigint b)
{
int n=(width=b.width ?width:b.width) ;
int i;
char t;
for(i=0;in;i++)
dig[i]=dig[i]+b.dig [i];
for(i=0;in;i++)
{
t=dig[i];
dig[i]=t%10;
dig[i+1]+=t/10;
}
if(0!=dig[n]) width=n+1;
else width=n;
return *this;
}
bigint::bigint()
{
width=0;
for(int i=0;iMAXWIDTH;i++) dig[i]=0;
}
#includestdio.h
#includestring.h
//翻转
void *reverse(char str[])
{
int len =strlen(str);
char*ps,*pe,tmp;
ps=str,pe=str+len-1;
for( ;pspe;ps++,pe--)
{
tmp=*ps;
*ps=*pe;
*pe=tmp; //need *
}
return str; //dont't forget return str
}
//相加,并ascii码变为相应的数字
void add(char a[],char b[])
{
char *pl,*ps;
int i,la,lb,len;
la=strlen(a);
lb=strlen(b);
(lalb)?(pl=a,ps=b,len=lb):(pl=b,ps=a,len=la);
for(i=0 ;ilen ;i++)
{
pl[i] += ps[i]-96; //96=2*'0'
//don't need *
}
len = (lalb)?la:lb;
for( ;ilen;i++)
{
pl[i] -= 48; //don't need *
}
for(i=0 ;ilen ;i++)
{
if(pl[i] 9)
{
pl[i+1]++;
pl[i] %= 10;
}
}
if(pl[len] != 0)
{
printf("%d",pl[len]);
}
for(i=len-1 ;i=0 ;i--)
{
printf("%d",pl[i]);
}
}
int main()
{
char a[200],b[200];
scanf("%s%s",a,b);
add(reverse(a),reverse(b));
return 0;
}
#include string.h
#include stdio.h
#include stdlib.h
#define N 100
int main(int argc, char const *argv[])
{
char arr[N] = {};
gets(arr);
char brr[N] = {};
gets(brr);
int len1,len2,i = 0,j = 0;
len1 = strlen(arr);
len2 = strlen(brr);
int len = len1len2?len1:len2;
/* c99之后数组初始化支持整型表达式,称为可变长数组,但按照c89的标准是不对的
int num1[len]; //将字符串转换成翻转的整型数组
int num2[len];
*/
int* num1 = (int*)malloc(len*sizeof(int));
int* num2 = (int*)malloc(len*sizeof(int));
for (i = 0; i len; i++)
{
num1[i] = ilen1 ? arr[len1-i-1]-'0':0;
}
for (j = 0; j len; j++)
{
num2[j] = jlen2 ? brr[len2-j-1]-'0':0;
}
//int sum[len]; //定义和数组
int* sum = (int*)malloc(len*sizeof(int));
int flag=0; //设进位符
for (i = 0; i len; i++)
{
sum[len-1-i] = (num1[i]+num2[i]+flag)%10;
flag = (num1[i]+num2[i]+flag)/10;
}
if (flag == 1) printf("1"); //如果最高位有进位 则输出一个1
for (i = 0; i len; i++)
{
printf("%d",sum[i]);
}
printf("\n");
free(num1);
free(num2);
free(sum);
num1 = NULL;
num2 = NULL;
sum = NULL;
return 0;
}
扩展资料:
gets()函数用法
gets是从标准输入设备读字符串函数。
函数原型:char*gets(char*str);
功能为:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。
注意:不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。使用时需要包含stdio.h头文件
参数
str为字符串指针,用来存放读取到的数据。
返回值
读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。所以在遇到返回值为NULL的情况,要用ferror或feof函数检查是发生错误还是遇到EOF。