本文目錄一覽:
- 1、c語言 大整數乘法
- 2、c語言大整數乘法
- 3、C語言 大整數乘法 求代碼
- 4、c語言大整數的乘法
c語言 大整數乘法
#include stdio.h
#includestring.h
int main()
{
int i,j,k=0;
char a[201]=”0″,b[201]=”0″,c[401]=”0″; //這裡將c[0]設為『0』,影響到下面輸入
scanf(“%s%s”,a,b);
for (i=0;i=strlen(a)-1;i++)
for (j=0;j=strlen(b)-1;j++)
{c[i+j+1]+=(a[i]-‘0’)*(b[j]-‘0’);}
k=(strlen(a)+strlen(b)-1);
for (;k=1;k–)
{
c[k-1]+=c[k]/10;
c[k]=c[k]%10; //這一步會將c[k]破壞,所以倒轉
}
if(c[0]!=’0′) //若最高位為0,則不輸出;
printf(“%c”,c[0]);
j=strlen(a)+strlen(b);
for (i=1;ij;i++)
{
printf(“%d”,c[i]);
}
return 0;
}
======================================
系統報錯的原因是c[1]是char型,不是字元串數組,要用%c而是%s,我想你是把i寫成了1了
c語言大整數乘法
dc這個函數裡面連b這個參數都沒有使用,這也能出結果…,
if(z[0]=’0′)continue 也寫錯了
不是打擊你,你的代碼太濫了,實在不想去找錯誤,給你我以前寫的代碼吧,你自己整理一下
#include stdio.h
int mulx(char * a,int b,char * r,int d);
void init(char * s);
char buf1[4*1024];
char buf2[4*1024];
char buf3[4*1024];
int main()
{
char * a;
char * b;
char * r;
char * t;
int d;
int i;
a = buf1;
b = buf2;
r = buf3;
init(NULL);
while(scanf(“%s %d”,a,d)!=EOF)
{
mulx(a,d,r,10);
printf(“%s\n”,r);
}
return 0;
}
char c2d[256]; //字元轉換成數字
char * charset; //代表數字的字元
/*功能:設置使用那些字元表示數字,默認的為”0123456789ABCDEF”*/
/*參數:*/
/*返回值:*/
void init(char * s)
{
int i;
if(s==NULL)
charset = “0123456789ABCDEF”;
else
charset = s;
for(i=0;i256;i++)
c2d[i] = 0;
for(i=0;charset[i];i++)
c2d[charset[i]] = i;
}
/*功能:清除前導零*/
/*參數:需要清楚的數字*/
/*返回值:清零後數字的位數*/
int clearZeros(char * a)
{
int i,j;
for(i=0;a[i]==charset[0];i++);
for(j=0;a[i];i++,j++)
a[j] = a[i];
a[j] = 0;
if(j==0)
{
a[j++] = charset[0];
a[j] = 0;
}
return j;
}
/*功能:乘,用於進位轉換之類*/
/*參數:a 和 b 分別為乘數,結果保存到 r , d 為使用的進位*/
/*注意:r 可以等於 a , b一定要小於d, 如果被乘數有前導0 則結果也會有前導0*/
/*返回值:結果的位數*/
int mulx(char * a,int b,char * r,int d)
{
int i,j,k,len;
int c,t;
if(r==NULL)
r = a;
for(i=0;a[i];i++);
len = k = i;
for(c=0,i–,r[k–]=0;i=0 ;i–,k–)
{
t = c2d[a[i]] * b + c ;
c = t/d;
r[k] = charset[t%d];
}
if(c)
{
for(i=len,j=++len;i=0;i–,j–)
r[j] = r[i];
r[0]=charset[c];
}
return len;
}
C語言 大整數乘法 求代碼
#include stdio.h #include string.h #define Maxline 300 void main() { void mul(char str1[],char str2[]); char str1[Maxline],str2[Maxline]; scanf(“%s%s”,str1,str2); mul(str1,str2); } void mul(char str1[],char str2[]) { int i,j,length1,length2,tag; int num1[Maxline],num2[Maxline],num3[Maxline]; length1=strlen(str1); length2=strlen(str2); for(i=0;iMaxline;i++) { num1[i]=0; num2[i]=0; num3[i]=0; } j=0; for(i=length1-1;i=0;i–) { num1[j]=str1[i]-‘0’; j++; } j=0; for(i=length2-1;i=0;i–) { num2[j]=str2[i]-‘0’; j++; } for(j=0;jlength2;j++) for(i=0;ilength1;i++) { num3[i+j]+=num1[i]*num2[j]; while(num3[i+j]=10) { num3[i+j]-=10; num3[i+j+1]++; } } for(i=Maxline-1;i=0;i–) { if(num3[i]!=0) { tag=i; break; } } for(i=tag;i=0;i–) { printf(“%d”,num3[i]); } printf(“\n”); }
c語言大整數的乘法
nums[]為指針變數數組
nums[i]=j僅能表示將nums[i]存儲的地址改為了j
若想修改其值,需加*,即*nums[i]=j;
或nums[i]=j;
你的程序里貌似很多地方這個都弄反了,改正後應該就沒有問題了…
原創文章,作者:WECG,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/133854.html