我正在研究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. 在C中乘以兩個數組
- 5. 增加了兩個長整數用C
- 6. 乘以兩個數據幀
- 7. 整數乘char(C++)
- 8. 長乘C
- 9. 乘兩個大整數存儲爲整數載體
- 10. 正整數乘法用C
- 11. 無符號長整數乘法
- 12. jquery錯誤兩位數乘以後的長十進制數
- 13. 乘以整數使用TMAP
- 14. x86彙編乘以兩個32位數
- 15. 乘以兩個大於255的數字
- 16. [R乘以兩個數據列幀
- 17. 乘以兩個屬性
- 18. 乘以兩個字段
- 19. C程序乘以一個數組的整型值
- 20. 乘以兩位小數
- 21. 在長時間存儲兩個整數
- 22. 以並行模式乘以大整數
- 23. 乘以不同長度的數據幀
- 24. 大整數乘法(階乘)
- 25. 整數乘以錯誤的數字
- 26. 乘以複用常數C++
- 27. Python將兩個不等長的數組相乘
- 28. 有沒有辦法在JavaScript中正確乘以兩個32位整數?
- 29. 如果初始輸入是C++中的奇數整數,則將兩個整數相乘
- 30. 整數如何在C++中相乘?
如果它不是一個事實,即你的輸入和輸出都在基地10,你可以通過使用基數2^32(數字保持在64位類型)或基數2^16(以32位類型)而不是基數10來更有效地完成所有這些操作。 – 2009-12-06 23:10:48