A. c语言超长整数相加
#include <stdio.h>#include <string.h>#define MAXLEN 1000void longadd(char* s1,char* s2 ,int* s3)
{ int arr1[MAXLEN]; int arr2[MAXLEN]; int arr3[MAXLEN]; int i; //求字符串长度倒序放在int 数组里面
int len1 = strlen(s1); for( i = 0; i < len1; i++)
{
arr1[i] = s1[len1-1-i] - '0';
} //求字符串长度倒序放在int 数组里面
int len2 = strlen(s2); for( i = 0; i < len2; i++)
{
arr2[i] = s2[len2-1-i] - '0';
} //加法运算
for( i = 0; i < MAXLEN; i++)
{
arr3[i] = arr1[i] + arr2[i];
} //数据处理超过9的进行取余并且进位
for( i = 0; i < MAXLEN; i++)
{ if(arr3[i] >= 10)
{
arr3[i+1] += arr3[i] / 10;
arr3[i] = arr3[i] % 10;
}
s3[i] = arr3[i];
} return;
}int main(int argc, char const *argv[])
{ char buff1[MAXLEN]; char buff2[MAXLEN]; int arr[MAXLEN]; puts("input 1:");
gets(buff1); puts("input 2:");
gets(buff2);
longadd(buff1,buff2,arr); //通过z变量的值过滤前面的0 倒序输出
int z = 0; for(int j =MAXLEN -1 ; j >= 0 ; j-- )
{ if(z == 0)
{ if(arr[j] != 0)
{ printf("%d",arr[j]);
z= 1;
}
} else
{ printf("%d",arr[j]);
}
} //如果z值没有改变则输出0
if( z== 0)
{ printf("0\n");
} return 0;
}
B. 用C语言编程计算两个超长正整数(长度小于100)的加法
这是大数加法问题,我给你一个参考代码
输入至多100行的文本,每行是一个至多100位的十进制无符号大整数,最后的输入行为零。要求计算出这些大整数的和,并以十进制方式显示。
示例输入:
0
示例输出:#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
const int n = 100;// 数字的最大位数
const int b = 10; // 数字的进制
char r[n+1] = {0};// 加数
char s[n+1] = {0};// 求和
while (scanf("%s", r) && strcmp(r, "0")) { // 对每一个加数...
for (int i = strlen(r)-1, j = n-1; i >= 0; i--, j--) { // 中的每一个数字位
r[i] -= '0'; // char -> int
for (int k = j, c = 0; 1; k--) { // update s
const int sum = (!c ? r[i] : 0) + s[k] + c; // local sum
if ((c = sum > b - 1)) s[k] = sum - b; // do update
else { s[k] = sum; break; } // end update
}
}
}
for (int i = 0; i < n; putchar(s[i++] + '0'));
return 0;
}
C. 如何用C语言实现长整数的运算
如果你的编译器支持c99标准那么用 long long 来定义64位的整数,这样的数已经很大了!
当然c中可以自己定义有关大数储存运算的函数.要求熟悉数据结构的很多基本知识.当然也可以变通的去实现大数的运算!
举个例子:求10000!的程序:
1.变通的方法求1000!
#include<math.h>
#include<stdio.h>
int main()
{
long i;
double ln=0;
for(i=1;i<=10000;i++)
ln+=log10(i);
i=(long)ln;ln=pow(10,ln-i);
printf("10000!=%lf*10^%ld\n",ln,i);
return 0;
}
2.如果熟悉数据结构的知识可以用下面的方法解决
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
short mul(short a[],short d,short x)
{
long i,y=0;
for(i=0;i<d;i++)
{
y+=a[i]*(long)x;
a[i]=(short)(y%10000);
y/=10000;
}
a[d]=(short)y;
return d+!!y;
}
void main()
{
long s;
short *a,i,j,n,ws=1;
printf("N=");scanf("%d",&n);
#define Pi 3.14159265358979323846L
s=(long)((log(2*Pi*n)/2+n*(log(n)-1))/log(10)+1);
a=(short*)malloc((s/4+2)*sizeof(short));*a=1;
for(i=2;i<=n;i++)
ws=mul(a,ws,i);
printf("%d!=%d",n,a[ws-1]);
for(j=ws-2;j>=0;j--)
printf("%04d",a[j]);
printf("\n");
free(a);
}
===============================================
编程爱好者群:24410693 只要对c有兴趣就可以申请加入本群.
D. C语言如何计算长整数啊
#include"stdio.h"
#include"string.h"
#include<stdlib.h>
//数组长度对齐
voidAlignment(charc[],intlength_c,intlength){
inttemp=length;
while(length){
if(length_c>0){
c[length-1]=c[length_c-1];
}else{
c[length-1]='0';
}
length--;
length_c--;
}
c[temp]='