如何在 C 中列印一個與 3 1000相同的 1000 位數字?使用arr[1000], 中的每個位置arr都有一個數字。
void main() {
unsigned int Base, Power;
int Digit[1000] = { 0 }, i;
Base = 3;
Power = 1000;
}
uj5u.com熱心網友回復:
這是一個非常簡單的示例,可以幫助您入門。這是用于加法(不是乘法或求冪),它用于 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 位數的總和。您可能想要嘗試進行的第一個改進是保持對每個數字中實際位數的計數(可能在附加變數中)。
uj5u.com熱心網友回復:
假設Digit為一個陣列(它是一個陣列)(而不是一個數字),然后使用回圈列印這些單個數字。
由于Digit存盤在堆疊記憶體中,您可以使用sizeof()運算子。
int length = sizeof(Digit) / sizeof(Digit[0]);
for(int i = 0; i < length; i )
{
printf("%d", Digit[i]);
}
另外,避免void main() { }使用int main() { }.
uj5u.com熱心網友回復:
C 沒有標準的多精度整數包。您可以通過這種方式實作蠻力方法:
#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;
}
輸出:
3^1000 = 1322070819480806636890455259752144365965422032752148167664920368226828597346704899540778313850608061963909777696872582355950954582100618911865342725257953674027620225198320803878014774228964841274390400117588618041128947815623094438061566173054086674490506178125480344405547054397038895817465368254916136220830268563778582290228416398307887896918556404084898937609373242171846359938695516765018940588109060426089671438864102814350385648747165832010614366132173102768902855220001
3 1000只有 478 位,對于 1000 位,您需要 3 2094或 3 2095。
uj5u.com熱心網友回復:
您的問題由兩部分組成:
- 如何計算結果并將其寫入陣列?
- 如何列印結果陣列?
問題的前半部分已經在其他人提供的答案中得到了回答。這個答案提供了一個關于如何列印結果陣列的解決方案,假設陣列的元素是型別的int(因為它們在問題中)。
如果int陣列中的每個元素都是一個介于0和之間9的數字,它代表一個數字,那么您可以使用以下函式來列印陣列:
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 );
}
該程式具有以下輸出:
3400000000000000000000000000000000000000000000000000000000000
請注意,使用 32 位存盤和int之間的單個數字有點浪費記憶體。因此,使用它會減少浪費,保證能夠表示最多的數字(這就足夠了,因為我們只需要能夠表示最多的數字)。09char1279
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/465489.html
上一篇:帶有指標和記憶體說明的行內代碼
下一篇:對話框中的粗體文本-DXL
