随机生成两个超长数字计算其和
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
void plus(int a[], int b[], int n1, int n2, int *c);
int string_to_num(char s);
char num_to_string(int num);
void randnum();
int main()
{
srand((unsigned)time(NULL));
int num1bit,num2bit;
do{
num1bit = rand()%100;
num2bit = rand()%100;
}while(num1bit<50||num2bit<50);//调节数位的大小;更改数字就可以调节字串
printf("两个数的数位为\n%d\n%d\n",num1bit,num2bit);
int num1[num1bit],num2[num2bit];
randnum(num1,num1bit);
randnum(num2,num2bit);//随机生成两个数;
int i;
for(i=0;i<num1bit;i++)
{
printf("%d",num1[i]);
}
printf("\n");
for(i=0;i<num2bit;i++)
{
printf("%d",num2[i]);
}
printf("\n");
if(num1bit>num2bit){
int out[num1bit+1];
plus(num1,num2,num1bit,num2bit,out);
if(out[0]==0){
for(i=1;i<num1bit+1;i++)
{
printf("%d",out[i]);
}
}
else{
for(i=0;i<num1bit+1;i++)
{
printf("%d",out[i]);
}
}
}
else{
int out [num2bit+1];
plus(num2,num1,num2bit,num1bit,out);
if(out[0]==0){
for(i=1;i<num2bit+1;i++)
{
printf("%d",out[i]);
}
}
else{
for(i=0;i<num2bit+1;i++)
{
printf("%d",out[i]);
}
}
}
return 0;
}
//进行加法运算
void plus(int a[], int b[], int n1, int n2, int *c)
{
int aa[n1+1],bb[n1+1];
int i,j,k;
for(i=n1;i>=1;i--)
{
aa[i] = a[i-1];
}
aa[0] = 0;
j=n1-n2;
for(i=n1;i>=0;i--)
{
if(i>j){
bb[i] = b[i-j-1];
}
else{
bb[i]=0;
}
}
int cc[n1+1];
for(i=n1;i>=0;i--){
cc[i]=aa[i]+bb[i];
}
for(i=n1;i>=1;i--){
*(c+i)=cc[i]%10;
if(cc[i]>9)
{
cc[i-1]++;
}
}
*c=cc[0];
}
//生成随机数,输入0时产生两位的随机数;
void randnum(int *num,int n)
{
int i;
srand((unsigned)time(NULL));
for(i=0;i<n;i++)
{
*(num+i) = rand()%10;
}
if(*(num)==0){
do{
*(num) = rand()%10;
}while(*(num)==0);
}
}
,(我自己做得拉,不过好歹是写出来了,嘿嘿)