2017-07-30 37 views
-2

兩個整數分別存儲在數組a1和a2中,產品的計算過程與計算過程相同,但不會輸出正確的結果。 問題是:想要產生312 * 321 = 1 0 0 1 5 2,但是這第一個程序產生 ? 0 9 9 11 5 2 以產生正確的結果1 0 0 1 5 2,呼叫功能名稱func(C,N * 2)c程序查找調用函數

#include <stdio.h> 
#include <stdlib.h> 
#define N 3 
int main() 
{ 

int a1[N]={1,2,3}; 
int a2[N]={2,1,3}; 
int b[N][N]; 
int c[N*2]; 
int i,j; 

for(i=0;i<N;i++){ 
    for(j=0;j<N;j++) 
b[i][j]=a1[j]*a2[i]; 
} 


c[0]=b[0][0]; 
c[1]=b[0][1]+b[1][0]; 
c[2]=b[0][2]+b[1][1]+b[2][0]; 
c[3]=b[1][2]+b[2][1]; 
c[4]=b[2][2]; 

for(i=N*2-1;i>=0;i--) 
{ 
    printf("%d ",c[i]); 
} 
    printf("\n"); 
    return 0; 
} 

其結果是:0 9 9 11 5 2

   |0|1|2| ->A1 
    ---------------- 
A2<-| 0|2|4|6|  
    | 1|1|2|3| 
    | 2|3|6|9| 

這個數組與321 * 312相同使用手工計算

問題:定義函數func()來輸出正確結果1 0 0 1 5 2,call func(c,N * 2);下面我以粗體顯示調用函數func()的代碼。任何想法??以及func()背後的邏輯是什麼?試驗和錯誤?這背後有算法嗎?

#include <stdio.h> 
#include <stdlib.h> 
#define N 3 
int main() 
{ 

int a1[N]={1,2,3}; 
int a2[N]={2,1,3}; 
int b[N][N]; 
int c[N*2]; 
int i,j; 

for(i=0;i<N;i++){ 
    for(j=0;j<N;j++) 
b[i][j]=a1[j]*a2[i]; 
} 


c[0]=b[0][0]; 
c[1]=b[0][1]+b[1][0]; 
c[2]=b[0][2]+b[1][1]+b[2][0]; 
c[3]=b[1][2]+b[2][1]; 
c[4]=b[2][2]; 

**func(c,N*2);** 

for(i=N*2-1;i>=0;i--) 
{ 
    printf("%d ",c[i]); 
} 
    printf("\n"); 
    return 0; 
} 

**void func(int a[],int digit) 
{ 
    here no idea.... 
    }** 
+0

這似乎是你應該修改傳入的數組,以便在打印值時獲得正確的結果。我很難理解你想要做什麼。 –

+0

這裏的c數組有0 9 9 11 5 2結果,但由於我必須調用func函數來產生1 0 0 1 5 2,我只能修改c數組,因爲它是唯一傳遞給func的數組功能。但我不知道如何修改它,不要得到邏輯 – fiksx

回答

0

試試這個;

void func(int a[], int digit) 
{ 
    int i, c = 0; 
    for(i = 0; i < digit; i ++) 
    { 
     a[i] += c; 
     c = a[i]/10; 
     a[i] = a[i] % 10; 
    } 
} 
+0

Thankyou !!!!我能問一下這個背後的邏輯嗎?你怎麼知道你必須除以10找到剩餘的?我在這裏知道每次數字大於9時都有一個數字,但我不知道如何使程序產生該數字 – fiksx

+0

更改邏輯:「如果數字大於9,則有進位」 - >「總是有攜帶偶數0「。它會使它變得簡單。 –

+0

這裏的模式是當2進位爲0時,當5進位爲0時,當11進位爲1且僅顯示最後一位數時11%10爲1,所以當9-> 9 + 1(進位)所以進位爲1想顯示最後一個數字,所以10%10是0 ,,, ..所以這裏是邏輯? – fiksx

0

我想你應該改變兩件事情:

首先初始化結果數組

int c[N * 2] = {0}; //initialize 

而且功能看起來像

void func(int a[], int size) { 
    int carry = 0; 
    for (int i = 0; i < size; i++) { 
     a[i] += carry; 
     carry = a[i]/10; 
     a[i] = a[i] % 10; 
    } 
} 
+0

Thankyou這裏爲什麼需要初始化c?除此之外,你是否從運載中找到了pattarn? – fiksx

+0

@DevinaMuljono否則,'a [5]'將具有隨機的初始詮釋值,必須專門處理。 – aristotll

+0

啊好吧我知道了,因爲c [5]沒有價值。除了c [0] = b [0] [0] ....還有另外一種寫入循環的方法嗎?爲了在循環中編寫它,你還必須找到模式? – fiksx