#include stdio.h
創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營(yíng)銷(xiāo),包括網(wǎng)站建設(shè)、網(wǎng)站制作、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營(yíng)銷(xiāo)策劃推廣、電子商務(wù)、移動(dòng)互聯(lián)網(wǎng)營(yíng)銷(xiāo)等。創(chuàng)新互聯(lián)為不同類(lèi)型的客戶(hù)提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,創(chuàng)新互聯(lián)核心團(tuán)隊(duì)10年專(zhuān)注互聯(lián)網(wǎng)開(kāi)發(fā),積累了豐富的網(wǎng)站經(jīng)驗(yàn),為廣大企業(yè)客戶(hù)提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹(shù)立了良好口碑。
#include string.h
#define MAXSIZE 1025
void Div(char *str1, char *str2, char *str3)
{
int i1, i2, i, j, jj, tag, carry, cf, c[MAXSIZE];
int len1 = strlen(str1), len2 = strlen(str2), lend;
char d[MAXSIZE];
memset(c, 0, sizeof(c));
memcpy(d, str1, len2);
lend = len2; j = 0;
for( i1=len2-1; i1 len1; ++i1 )
{
if( lend len2 )
{
d[lend] = str1[i1+1]; c[j] = 0;
++j; ++lend;
}
else
if( lend == len2 )
{
jj = 1;
for( i=0; i lend; ++i )
{
if( d[i] str2[i] ) break;
else if( d[i] str2[i] )
{
jj = 0; break;
}
}
if( jj == 0 )
{
d[lend] = str1[i1+1]; c[j] = 0;
++j; ++lend;
continue;
}
}
if( jj==1 || lend len2 )
{
cf = jj=0;
while( d[jj] = '0' jj lend ) ++jj;
if( lend-jj len2 ) cf = 1;
else
if( lend-jj len2 ) cf = 0;
else
{
i2 = 0; cf = 1;
for( i=jj; i lend; ++i )
{
if( d[i] str2[i2] )
{
cf = 0; break;
}
else if( d[i] str2[i2] )
{
break;
}
++i2;
}
}//else
while( cf )
{
i2 = len2-1; cf = 0;
for( i=lend-1; i = lend-len2; --i )
{
d[i] = d[i]-str2[i2]+'0';
if( d[i] '0' )
{
d[i] = d[i]+10; carry = 1;
--d[i-1];
}
else carry = 0;
--i2;
}
++c[j]; jj=0;
while( d[jj] = '0' jj lend ) ++jj;
if( lend-jj len2 ) cf = 1;
else
if( lend-jj len2 ) cf = 0;
else
{
i2 = 0; cf = 1;
for( i=jj; i lend; ++i )
{
if( d[i] str2[i2] )
{
cf = 0; break;
}
else if( d[i] str2[i2] )
{
break;
}
++i2;
}
}//else
}//while
jj = 0;
while( d[jj] = '0' jj lend ) ++jj;
for( i=0;i lend-jj; ++i ) d[i] = d[i+jj];
d[i] = str1[i1+1]; lend = i+1;
++j;
}//else
}//for
i = tag = 0;
while( c[i] == 0 ) ++i;
for( ; i j; ++i, ++tag ) str3[tag] = c[i]+'0';
str3[tag] = '\0';
}
int main()
{
char a[110], b[110], c[110];
scanf( "%s%s", a, b );
Div( a, b, c );
printf( "%s\n", c );
return 0;
}
//只得到商的整數(shù)部分,小數(shù)部分沒(méi)有
#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);
}
整數(shù)除整數(shù)得到的一定是整數(shù),這個(gè)和c語(yǔ)言中的自動(dòng)類(lèi)型轉(zhuǎn)換有關(guān),按照我上面寫(xiě)的,把b強(qiáng)制轉(zhuǎn)換成浮點(diǎn)型,這樣得到的結(jié)果就是浮點(diǎn)型,還有輸出浮點(diǎn)型數(shù)時(shí)用 %f 。
#include stdio.h
#define MAXINT 1000
int compare(int a[],int b[]);
int bigplus(int a[],int b[],int c[]);
int bigsub(int a[],int b[],int c[]);
int bigmult(int a[],unsigned int b,int c[]);
int bigmult2(int a[],int b[],int c[]);
int bigdiv(int a[],unsigned int b,int c[],int *d);
int bigdiv2(int a[],int b[],int c[],int d[]);
int main(int argc, char *argv[])
{
int a[MAXINT]={10,5,4,6,5,4,3,2,1,1,1}; //被乘數(shù)或被除數(shù)
int b[MAXINT]={7,7,6,5,4,3,2,1}; //乘數(shù)或除數(shù)
int c[MAXINT],d[MAXINT]; //c[]存放商,d[]存放余數(shù)
int div=1234; //小乘數(shù)或小除數(shù)
int k=0;
int *res=k; //小余數(shù)整數(shù)指針
bigplus(a,b,c);
bigsub(a,b,c);
bigmult(a,div,c);
bigmult2(a,b,c);
bigdiv(a,div,c,res);
bigdiv2(a,b,c,d);
getchar();
return 0;
}
int compare(int a[],int b[]) //比較大整數(shù)的大小
{
int i;
if (a[0]b[0]) return 1; //比較a,b的位數(shù)確定返回值
else if (a[0]b[0]) return -1;
else //位數(shù)相等時(shí)的比較
{
i=a[0];
while (a[i]==b[i]) //逐位比較
i--;
if (i==0) return 0;
else if (a[i]b[i]) return 1;
else return -1;
}
}
int bigplus(int a[],int b[],int c[]) //大整數(shù)加法
{
int i,len;
len=(a[0]b[0]?a[0]:b[0]); //a[0] b[0]保存數(shù)組長(zhǎng)度,len為較長(zhǎng)的一個(gè)
for(i=0;iMAXINT;i++) //將數(shù)組清0
c[i]=0;
for (i=1;i=len;i++) //計(jì)算每一位的值
{
c[i]+=(a[i]+b[i]);
if (c[i]=10)
{
c[i]-=10; //大于10的取個(gè)位
c[i+1]++; //高位加1
}
}
if (c[i+1]0) len++;
c[0]=len; //c[0]保存結(jié)果數(shù)組實(shí)際長(zhǎng)度
printf("Big integers add: ";
for (i=len;i=1;i--)
printf("%d",c[i]); //打印結(jié)果
printf("\n";
return 0;
}
int bigsub(int a[],int b[],int c[]) //大整數(shù)減法
{
int i,len;
len=(a[0]b[0]?a[0]:b[0]); //a[0]保存數(shù)字長(zhǎng)度,len為較長(zhǎng)的一個(gè)
for(i=0;iMAXINT;i++) //將數(shù)組清0
c[i]=0;
if (compare(a,b)==0) //比較a,b大小
{
printf("Result:0";
return 0;
}
else if (compare(a,b)0)
for (i=1;i=len;i++) //計(jì)算每一位的值
{
c[i]+=(a[i]-b[i]);
if (c[i]0)
{
c[i]+=10; //小于0的原位加10
c[i+1]--; //高位減1
}
}
else
for (i=1;i=len;i++) //計(jì)算每一位的值
{
c[i]+=(b[i]-a[i]);
if (c[i]0)
{
c[i]+=10; //小于0原位加10
c[i+1]--; //高位減1
}
}
while (len1 c[len]==0) //去掉高位的0
len--;
c[0]=len;
printf("Big integers sub= ";
if (a[0]b[0]) printf("-";
for(i=len;i=1;i--) //打印結(jié)果
printf("%d",c[i]);
printf("\n";
return 0;
}
int bigmult(int a[],unsigned int b,int c[])//高精度乘以低精度
{
int len,i;
for (i=0;iMAXINT;i++) //數(shù)組清0
c[i]=0;
len=a[0];
for(i=1;i=len;i++) //對(duì)每一位計(jì)算
{
c[i]+=a[i]*b;
c[i+1]+=c[i]/10;
c[i]%=10;
}
while (c[++len]=10) //處理高位
{
c[len+1]=c[len]/10;
c[len]%=10;
}
if (c[len]==0) len--; //處理高進(jìn)位為0情況
printf("Big integrs multi small integer: ";
for (i=len;i=1;i--)
printf("%d",c[i]);
printf("\n";
}
int bigmult2(int a[],int b[],int c[]) //高精度乘以高精度
{
int i,j,len;
for (i=0;iMAXINT;i++) //數(shù)組清0
c[i]=0;
for (i=1;i=a[0];i++) //被乘數(shù)循環(huán)
for (j=1;j=b[0];j++) //乘數(shù)循環(huán)
{
c[i+j-1]+=a[i]*b[j]; //將每一位計(jì)算累加
c[i+j]+=c[i+j-1]/10; //將每一次結(jié)果累加到高一位
c[i+j-1]%=10; //計(jì)算每一次的個(gè)位
}
len=a[0]+b[0]; //取最大長(zhǎng)度
while (len1 c[len]==0) //去掉高位0
len--;
c[0]=len;
printf("Big integers multi: ";
for (i=len;i=1;i--) //打印結(jié)果
printf("%d",c[i]);
printf("\n";
}
int bigdiv(int a[],unsigned int b,int c[],int *d) //高精度除以低精度
{ //a[] 為被乘數(shù),b為除數(shù),c[]為結(jié)果,d為余數(shù)
int i,len;
len=a[0]; //len為a[0]的數(shù)組長(zhǎng)度
for (i=len;i=1;i--)
{
(*d)=10*(*d)+a[i]; //計(jì)算每一步余數(shù)
c[i]=(*d)/b; //計(jì)算每一步結(jié)果
(*d)=(*d)%b; //求模余數(shù)
}
while (len1 c[len]==0) len--; //去高位0
printf("Big integer div small integer: ";
for (i=len;i=1;i--) //打印結(jié)果
printf("%d",c[i]);
printf("\tArithmetic compliment:%d",*d);
printf("\n";
}
int bigdiv2(int a[],int b[],int c[],int d[]) //高精度除以高精度
{
int i,j,len;
if (compare(a,b)0) //被除數(shù)較小直接打印結(jié)果
{
printf("Result:0";
printf("Arithmetic compliment:";
for (i=a[0];i=1;i--) printf("%d",a[i]);
printf("\n";
return -1;
}
for (i=0;iMAXINT;i++) //商和余數(shù)清0
{
c[i]=0;
d[i]=0;
}
len=a[0];d[0]=0;
for (i=len;i=1;i--) //逐位相除
{
for (j=d[0];j=1;j--)
d[j+1]=d[j];
d[1]=a[i]; //高位*10+各位
d[0]++; //數(shù)組d長(zhǎng)度增1
while (compare(d,b)=0) //比較d,b大小
{
for (j=1;j=d[0];j++) //做減法d-b
{
d[j]-=b[j];
if (d[j]0)
{
d[j]+=10;
d[j+1]--;
}
}
while (j0 d[j]==0) //去掉高位0
j--;
d[0]=j;
c[i]++; //商所在位值加1
}
}
j=b[0];
while (c[j]==0 j0) j--; //求商數(shù)組c長(zhǎng)度
c[0]=j;
printf("Big integers div result: ";
for (i=c[0];i=1;i--) //打印商
printf("%d",c[i]);
printf("\tArithmetic compliment: "; //打印余數(shù)
for (i=d[0];i=1;i--)
printf("%d",d[i]);
printf("\n");
}
1、大數(shù)就是位數(shù)多,數(shù)值大的意思。通常來(lái)說(shuō)c語(yǔ)言里的基本數(shù)據(jù)類(lèi)型范圍是有限的,如long型的最大只能表示幾十億,幾十億也就11位數(shù)字長(zhǎng)度而已。如果用100長(zhǎng)的數(shù)組表示,假設(shè)數(shù)組一個(gè)元素存數(shù)字的一位,那么總位數(shù)可以達(dá)到100位,這是基本數(shù)據(jù)類(lèi)型無(wú)法表示的。
2、例程:
#include"stdio.h"
int?getlength(char?a[]){
int?i=0;
while(a[i])
i++;
return?i;
}/*返回字符串的長(zhǎng)度*/
int?chartoint(char?a){
return?a-48;
}/*將字符編程整形*/???
void?creatarray(char?a[],char?b[]){
printf("請(qǐng)輸入第一個(gè)數(shù):");
scanf("%s",a);
printf("請(qǐng)輸入第二個(gè)數(shù):");
scanf("%s",b);
}/*創(chuàng)建數(shù)組*/
void?go(char?a[],char?b[],int?s[]){
int?alength=getlength(a);
int?blength=getlength(b);
int?i=alength-1;
int?j=blength-1;
int?k;/*s數(shù)組下標(biāo)*/
int?slength;
if(alengthblength)
slength=alength;
else
slength=blength;
k=slength;
while(i=0j=0)
s[k--]=chartoint(a[i--])+chartoint(b[j--]);
while(i=0)
s[k--]=chartoint(a[i--]);
while(j=0)
s[k--]=chartoint(b[j--]);
k=slength;
while(k=2){
if(s[k]=10){
s[k-1]++;
s[k]-=10;
}
k--;
}
printf("兩數(shù)之和為:");
if(s[1]=10){
s[0]=1;
s[1]-=10;
for(i=0;i=slength;i++)
printf("%d",s[i]);
}
else{
for(i=1;i=slength;i++)
printf("%d",s[i]);
}
printf("\n");
}
void?main(){
char?a[1000],b[1000];
int?s[1000];
int?lab;
lab1:?creatarray(a,b);
go(a,b,s);
printf("請(qǐng)輸入1繼續(xù)(想退出按其他數(shù)字鍵):");
scanf("%d",lab);
if(lab==1)
goto?lab1;
}