[英]How can I compute a very big digit number like (1000 digits ) in c , and print it out using array
如何在 C 中打印一個 1000 位數字與 3 1000相同的數字? 使用arr[1000]
, arr
中的每個 position 都會得到一個數字。
void main() {
unsigned int Base, Power;
int Digit[1000] = { 0 }, i;
Base = 3;
Power = 1000;
}
這是一個非常簡單的示例,可以幫助您入門。 這是用於加法(不是乘法或求冪),它用於 3 位數,而不是千位。 但它演示了將每個數字保存在數組的一個元素中的基本思想。 當你在計算機程序中加(或減,或乘)這樣的數字時,你可以使用你在學校做算術時所學的完全相同的技巧。
#include <stdio.h>
int main()
{
int a[10], b[10], c[10];
a[2] = 4; a[1] = 5; a[0] = 6; /* 456 */
b[2] = 7; b[1] = 8; b[0] = 9; /* 789 */
int partialsum = a[0] + b[0];
c[0] = partialsum % 10;
int carry = partialsum / 10;
partialsum = a[1] + b[1] + carry;
c[1] = partialsum % 10;
carry = partialsum / 10;
partialsum = a[2] + b[2] + carry;
c[2] = partialsum % 10;
carry = partialsum / 10;
c[3] = carry;
printf("%d%d%d%d\n", c[3], c[2], c[1], c[0]);
}
該程序的最大限制是它只能使用 3 位數字和 4 位總和。 您可能想要嘗試進行的第一個改進是保持對每個數字中實際數字位數的計數(可能在其他變量中)。
另請參閱此問題及其答案及其鏈接的副本。
假設Digit
是一個數組(它是一個數組)(而不是一個數字),然后使用循環打印這些單個數字。
由於Digit
存儲在堆棧 memory 中,您可以使用sizeof()
運算符。
int length = sizeof(Digit) / sizeof(Digit[0]);
for(int i = 0; i < length; i++)
{
printf("%d", Digit[i]);
}
另外,避免void main() { }
,使用int main() { }
。
C 沒有標准的多精度 integer package。您可以通過這種方式實現蠻力方法:
#include <stdio.h>
int multiply(char *num, int max, int p, int n) {
int i, carry = 0;
for (i = max; i > p;) {
carry += (num[--i] - '0') * n;
num[i] = '0' + carry % 10;
carry /= 10;
}
while (carry) {
num[--i] = '0' + carry % 10;
carry /= 10;
}
return i;
}
#define N 3
#define POWER 1000
#define NUMSIZE 1000
int main() {
char num[NUMSIZE];
int p = NUMSIZE;
num[--p] = '\0';
num[--p] = '1';
for (int i = 0; i < POWER; i++) {
p = multiply(num, NUMSIZE - 1, p, N);
}
printf("%d^%d = %s\n", N, POWER, num + p);
return 0;
}
Output:
3^1000 = 1322070819480806636890455259752144365965422032752148167664920368226828597346704899540778313850608061963909777696872582355950954582100618911865342725257953674027620225198320803878014774228964841274390400117588618041128947815623094438061566173054086674490506178125480344405547054397038895817465368254916136220830268563778582290228416398307887896918556404084898937609373242171846359938695516765018940588109060426089671438864102814350385648747165832010614366132173102768902855220001
3 1000只有 478 位,1000 位需要 3 2094或 3 2095 。
你的問題由兩部分組成:
問題的前半部分已經在其他人提供的答案中得到了回答。 This answer提供了一個關於如何打印結果數組的解決方案,假設數組的元素是int
類型(因為它們在問題中)。
如果數組中的每個int
元素都是0
到9
之間的數字,表示一個數字,那么您可以使用以下 function 打印數組:
void print_digits( const int array[], int array_size )
{
int i = 0;
//skip leading zeros, but don't skip last zero
for ( ; i < array_size - 1; i++ )
{
assert( 0 <= array[i] && array[i] <= 9 );
if ( array[i] != 0 )
break;
}
//print all remaining digits
for ( ; i < array_size; i++ )
{
assert( 0 <= array[i] && array[i] <= 9 );
printf( "%d", array[i] );
}
printf( "\n" );
}
這是一個演示程序:
#include <stdio.h>
#include <assert.h>
void print_digits( const int array[], int array_size )
{
int i = 0;
//skip leading zeros, but don't skip last zero
for ( ; i < array_size - 1; i++ )
{
assert( 0 <= array[i] && array[i] <= 9 );
if ( array[i] != 0 )
break;
}
//print all remaining digits
for ( ; i < array_size; i++ )
{
assert( 0 <= array[i] && array[i] <= 9 );
printf( "%d", array[i] );
}
printf( "\n" );
}
int main( void )
{
int digits[100] = {0};
//set the number to 3.4 E+60
digits[39] = 3;
digits[40] = 4;
print_digits( digits, sizeof digits / sizeof *digits );
}
該程序具有以下 output:
3400000000000000000000000000000000000000000000000000000000000
注意 memory 用一個 32 位的int
來存儲0
到9
之間的單個數字有點浪費。 因此,使用char
來代替浪費會更少,它保證能夠表示最多127
個數字(這就足夠了,因為我們只需要能夠表示最多9
數字)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.