怎样用c语言实现大整数运算除法?无错完整版,谢谢
#includestdlib.h
typedef struct veryLong
{
int d;
struct veryLong *next;
} longNumber;
void Display(longNumber *h);
void CharToInt(char *sn,longNumber **h);
void Add(longNumber *h1, longNumber *h2, longNumber **h3);
void main()
{
char sn[1000];
longNumber *h1=NULL,*h2=NULL,*h3=NULL;
printf(“Number1:”); scanf(“%s”,sn);
CharToInt(sn,h1);
// Display(h1);
printf(“Number2:”); scanf(“%s”,sn);
CharToInt(sn,h2);
// Display(h2);
Add(h1,h2,h3);
Display(h3);
}
void Add(longNumber *h1, longNumber *h2, longNumber **h3)
{
int n,n1,n2,a,b=0;
longNumber *ln;
while(h1!=NULL||h2!=NULL||b!=0)
{
if(h1==NULL)
n1=0;
else
{
n1=h1-d;
h1=h1-next;
}
if(h2==NULL)
n2=0;
else
{
n2=h2-d;
h2=h2-next;
}
n=n1+n2+b;
a=n%10;
ln=(longNumber *)malloc(sizeof(longNumber));
ln-d=a;
ln-next=*h3;
*h3=ln;
b=n/10;
}
printf(“\n”);
}
void CharToInt(char *sn,longNumber **h)
{
int i;
longNumber *ln;
for(i=0;istrlen(sn);i++)
{
ln=(longNumber *)malloc(sizeof(longNumber));
ln-d=sn[i]-48;
ln-next=*h;
*h=ln;
}
}
void Display(longNumber *h)
{
printf(“结果:”);
while(h!=NULL)
{
printf(“%d”,h-d);
h=h-next;
}
printf(“\n”);
}
这个应该可以的。
求C语言编程大整数除法思路讲解!!!急!!
1,大整数除法运算,不同于其它的大整数运算,它不需要对字符串进行逆转,这主要是因为大整数除法是模拟手算过程,从最高位开始试商。
2,试商的过程是调用大整数减法和比较函数的过程,这里的减法运算只实现大数减小数的情形。
3,被除数为m位,除数为n位,则商最多为m位,余数最多为n位。
可以试试先以字符串形式输入,在进行运算
c语言大整数除法
#include “stdio.h”
#include “math.h”
void main(void)
{
int a,b,c,d,e,g;
float f;
printf(“int a,b”);
scanf(“%d %d”,a,b);
c=a+b;
d=a-b;
e=a*b;
f=a/(float)b ;
g=a%b;
printf(“c=%d\n d=%d\n e=%d\n f=%f\n g=%d\n”,c,d,e,f,g);
}
整数除整数得到的一定是整数,这个和c语言中的自动类型转换有关,按照我上面写的,把b强制转换成浮点型,这样得到的结果就是浮点型,还有输出浮点型数时用 %f 。
C语言中怎么实现两个超大整数的相加减乘除
#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。