我正在研究C中的一個程序,作爲家庭作業的一部分,在這個程序中我必須得到兩個長字符作爲字符串的乘積。例如:123456789021和132456789098.由於它被視爲一個字符串,我將它們轉換爲long long int來進行乘法運算。但是由此產生的產品將會非常大(我猜大於long long int)。任何人都可以請建議我一種方法來執行這種乘法?乘以兩個長整數C
乘以兩個長整數C
回答
這裏有一種方法:考慮如何在紙上手工乘以這些數字。實施C.這種方法,你必須發現:
- 如何打破了一個整數(表示爲字符串)成數字
- 如何每個數字轉換回一個整數
0 <= d < 10
- 如何管理的數字陣列(即有多大,你應該做的陣列?)
- 如何編寫循環(一個或多個),你可能需要實現乘法
- 如何管理攜帶來自一個數字產品到下一個
- 如何將這些數字轉換爲字符以便輸出
通常以字節數組表示的大整數。您可以在DLR中查看Microsoft的BigInteger實現。我認爲他們已經使用Knuth開發的算法
另一種方法是將數字乘以float/double並在顯示結果時指定小數。
這樣做可能會損失很多精度。 – 2009-12-06 19:34:07
儘管如此,如果數字太多,那不會給出確切的答案。根據使用情況,這可能是足夠好的,但我認爲這不是這個任務的重點。 – 2009-12-06 19:41:23
檢查這個BigInteger library和一個very basic sample code世界七。
如果你有興趣在C(僅乘法)我的一些家常代碼:
////////////////////////////////////////////////////////////////////////////////
Code removed after I checked the home-work tag ;)
///////////////////////////////////////////////////////////////////////////////////////
這工作在一些我曾參與早期的編程競賽;)但是,如果你正在尋找甚至更快的乘法算法可以實現Karatsuba algorithm,我現在親自使用這個實時比賽。
(第一個鏈接是_Mahbub Murshed Suman_的_BigInteger class_(版本6.7.28,2004年7月30日),第二個來自_World of Seven-Competitive Programming_,即使URL是「steven」。) – greybeard 2016-02-05 14:28:53
嗨,哥們,看看這個,我剛剛完成了它的昨天一天,我的功課的一部分:
#include<stdio.h>
#include<string.h>
int main()
{
char one[195];
char two[195];
char temp[195];
int a[195],c[195],b[195];
int x,i,j,k,l,p,add;
for(;;)/*determining the larger number...*/
{
printf("Input A:");
gets(one);
printf("Input B:");
gets(two);
k=strlen(one);
l=strlen(two);
if(l>k)
{
strcpy(temp,one);
strcpy(one,two);
strcpy(two,temp);
break;
}
else
{
break;
}
}
k=strlen(one);
l=strlen(two);
for(p=0;p<195;p++)/*assigning all initial values to 0*/
{
a[p]=0;
b[p]=0;
c[p]=0;
}
for(i=0;one[i];i++)/*converting char to integer(note:1,as a character assigned as 49.)*/
{
a[i]=((one[--k])-48);
}
for(i=0;i<two[i];i++)
{
b[i]=((two[--l])-48);
}
for(i=0;i<=strlen(two);i++)/*main algorithm*/
{
add=0;
p=0;
for(j=i;j<=(2*strlen(one)-1);j++)
{
x=c[j]+b[i]*a[p]+add;
c[j]=x%10;
add=x/10;
p++;
}
}
printf("\nMultiplication:");
for(p=(2*strlen(one)-1);p>=0;p--)
{
if(p>strlen(one)&&c[p]==0)
{
continue;
}
printf("%d",c[p]);
}
printf("\n");
}
- 1. 乘以兩個長號
- 2. 批量中乘以兩個整數
- 3. 長整數乘法
- 4. 將值顯式乘以長整數
- 5. 在C中乘以兩個數組
- 6. 增加了兩個長整數用C
- 7. 乘以整數
- 8. 乘以兩個數據幀
- 9. 整數乘char(C++)
- 10. C:乘兩個ScanFs
- 11. 當兩個整數相乘時NumberFormatException
- 12. 長乘C
- 13. C#錯誤除以兩個整數
- 14. 乘以二進制給出的兩個整數
- 15. 如何在MIPS中乘以兩個大於32位的整數?
- 16. 正整數乘法用C
- 17. 爲什麼兩個正整數的乘積是負整數?
- 18. 乘兩個大整數存儲爲整數載體
- 19. 無符號長整數乘法
- 20. jquery錯誤兩位數乘以後的長十進制數
- 21. JavaScript乘以3整數
- 22. 乘以整數使用TMAP
- 23. 在Excel VBA中乘以兩個數組
- 24. 使用'lookup'乘以兩個python數組
- 25. [R乘以兩個數據列幀
- 26. 乘以兩個大於255的數字
- 27. x86彙編乘以兩個32位數
- 28. 乘以兩個字節
- 29. 乘以兩個BigDouble值
- 30. 乘以兩個多項式
如果它不是一個事實,即你的輸入和輸出都在基地10,你可以通過使用基數2^32(數字保持在64位類型)或基數2^16(以32位類型)而不是基數10來更有效地完成所有這些操作。 – 2009-12-06 23:10:48