請使用**計算: 1234567891011121314151617181920*2019181716151413121110987654321
#include<
iostream
>
#include
<
algorithm
>
#include
<
stdio.h
>
#include
<
string
.h>
using
namespace
std;
#define
max_digit 500
//大數運算:加法
intmultiply(
int*
a,int*b,
int*&
result);
//大數運算:乘法
intadd(
int*
a,int*b,
int*&
result);
//大數運算:減法
intsub(
int*
a,int*b,
int*&
result);
//逐位調整大數,如result為11 9 22 -3 -2調整為:1 0 3 9 -3,然後再對符號提公升到最高位: 9 9 6 0 2... ... -1
//表示大數的值為-20699
void
ajustencodearray(
int*&
result,unsigned
intimaxnum);
//輸出大數
void
printbignum(
int*
result);
//把個位在高位的字元陣列轉為個位在低位(下標0)的整型陣列
void
carray2revdigitarray(
char
*carray,
int*
digitarray,unsigned
intinum);
//大數運算:加法
intadd(
int*
a,int*b,
int*&
result)
inti=0
,j=0;
//初始化result陣列
for(i=0
;i<
max_digit*2
;++i)for(i=
0;i<
max_digit;
++i)
ajustencodearray(result,max_digit*2
);return0;
}//大數運算:減法
intsub(
int*
a,int*b,
int*&
result)
inti=0
,j=0;
//初始化result陣列
for(i=0
;i<
max_digit*2
;++i)for(i=
0;i<
max_digit;
++i)
ajustencodearray(result,max_digit*2
);return0;
}//大數乘法
intmultiply(
int*
a,int*b,
int*&
result)
inti=0
,j=0;
//初始化result陣列
for(i=0
;i<
max_digit*2
;++i)//
a[0]為個位起算,結果的偏移位為i+j,
//如個位*十位,則運算結果的偏移為0+1即1
//例子:a[0]為9,b[1]為7,則result[1]加63
for(i=0
;i<
max_digit;
++i)
}ajustencodearray(result,max_digit*2
);return0;
}//逐位調整大數,如result為11 9 22 -3 -2調整為:1 0 3 9 -3,然後再對符號提公升到最高位: 9 9 6 0 2... ... -1
//表示大數的值為-20699
void
ajustencodearray(
int*&
result,unsigned
intimaxnum)}//
從低位開始往上調整,規則:大於10的正數要進製,負數要借位
for(i=0
;i<
inumflag;
++i)
else
if(result[i]
<0)
}//若有效最高位為負數,需要對負號進行提公升,就是對高位與餘下低位進行一次減法
if(result[inumflag]
<0)
;iminuend[inumflag]
=iweight;
//被減數
result[inumflag] =0
;
//構造減數
for(i=0
;i<
inumflag+1
;++i)//
調整借位
for(i=0
;i<
inumflag;
++i)
}result[imaxnum-1
] =-1
;}}void
printbignum(
int*
result)
index--;
}if(bnegative)
for(
inti
=index;i
>=0;
--i)
printf("\n
");}void
carray2revdigitarray(
char
*carray,
int*
digitarray,unsigned
intinum)
for(i=0
; i<
ilen;
++i)
}int
main()
printbignum(result);
ret=
add(a,b,result);
if(ret!=0
)printbignum(result);
ret=
sub(a,b,result);
if(ret!=0
)printbignum(result);
return0;
}
c語言之大數基本運算
今天我想給大家介紹有關大數運算的方法,大數這裡可以算是乙個難點同樣也是重點,以下的 只針對非負數,大家在看之前可以自己思考一下。考慮到整型變數的範圍有限,所以我們用字元陣列來定義輸入的兩個大數,首先要使它們相應的位對齊,位數少的在前補0,然後各個位數的相加要考慮到進製,這裡我定義為s。下面是全部 i...
大數運算之大數加法(C )
眾所周知,加法運算是小學一年級的學生就懂的知識點。即從兩個數個位開始,按位相加,逢十進一。對於懂得c 的你而言,so so so easy 只需要利用加法運算子即可 但若你要處理的數值位數十分巨大,如兩個位數為20的數相加。在紙上進行運算十分簡單,但在c 中直接使用加法運算子卻無法實現你的預期,這是...
C語言面試題分類 位運算
1.不用臨時變數交換兩個整數。a a b b a b a a b 2.實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如9的二進位制是1001,則輸出2。int check count fun int number return count int main 錯誤 如下 有符號數會造成...