2

で 2 つの大きな数を加算するプログラムを作成していCます。私の整数配列の結果には、2 つの数値 (配列にも格納されていた) の合計が保持されます。

たとえば、結果の配列が[0,0,3,2](実際の配列サイズは 20) の場合

実際の結果が 32 の場合、結果配列の内容を先行ゼロなしで表示するにはどうすればよいですか?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BASE 10
void align(int A[],int n);
void add(int A[],int B[], int C[]);
void Invert(int* a, int n);

int main(int argc, char** argv){
    char input1[20];
    char input2[20];
    int size = 20;
    int a;
    int b;
    int num1[20];
    int num2[20];
    int result[20];
    int length1 = strlen(argv[1]);
    int length2 = strlen(argv[2]);
    int i = 0;
    for (i=0;i<length1;i++){
       input1[i] = argv[1][i];
    }
    for (i=0;i<length2;i++){
        input2[i] = argv[2][i];
    }

    a=atoi(input1);
    b=atoi(input2);
    align(num1,a);
    align(num2,b);
    add(num1,num2,result);
    Invert(result,size);
    for (i=0;i<20;i++){
        printf("%d",result[i]);
    }

    return 0;
}

void align (int A[], int n){
    int i = 0;

    while (n) {
        A[i++] = n % BASE;

        n /= BASE;
    }

    while (i < 20) A[i++] = 0;
}

void add (int A[], int B[], int C[]) {
    int i, carry, sum;
    carry = 0;
    for (i=0; i<20; i++) {
        sum = A[i] + B[i] + carry;
        if (sum >= BASE) {
            carry = 1;
            sum -= BASE;
        } else
            carry = 0;
        C[i] = sum;
    }

    if (carry) printf ("overflow in addition!\n");
}

void Invert(int* a, int n)
{
    int i;
    int b;
    for(i=0; i<n/2; i++){
        b = a[i];
        a[i] = a[n-i-1];
        a[n-i-1] = b;
    } 
}

`

4

4 に答える 4

1

以下のコードでこれを行うことができます:-

int flag=1;
for(i=0;i<20;i++)
{
   if(flag==1&&array[i]!=0)
      flag=0;
   if(flag!=1)
   {
      printf("%d",array[i]);
   }
}

これにより、先頭のゼロがすべて削除されます。

于 2014-07-19T10:23:20.633 に答える
0

ポインターを使用して解決策を提案します。配列にゼロしか格納されていない場合も扱います。私はポインタの方が快適です。

int test[20] = {0,0,0,0,1,2,3,4,5,6,7,8,9,0,0,1,2,3,4,5};
int test_bis[20] = {0};
int * ptr_test  = test_bis;

int ii = 0;

while( *(ptr_test)== 0 && ii < 20 ) {
    ptr_test++;
    ii++;
}
if( ii < 20)
    do {
        printf("%d",*(ptr_test));
        ptr_test++;

    } while (++ii < 20);
else
    printf("0");
于 2018-05-18T14:05:17.027 に答える
-1

整数配列の場合は、それに応じて変更できます。

for(i=0;i<20;i++){
    if(flag==1&&array[i]==0)
        {
               // just skips until first nonzero
        }
    else if(flag==1&&array[i]!=0){
        flag=0;               // when first nonzero comes set flag to 0 and print it
        printf("%d",array[i]);
    }
    else {
        printf("%d",array[i]);  // after first nonzero simply print it
    }
}
于 2014-07-19T11:05:08.380 に答える