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]='