Всем Здравствуйте.Не хочется создавать новую тему,ведь опять о своем умножении и делении.Вот код-сложение и деление работает,а вот умножение плохо некоторые числа умножает,добавляя при этом лишние нули ,другие неправильно.Помогите пожалуйста добить умножение и начать наконец деление.Заранее всам БОЛЬШОЕ СПАСИБО.
Код | [color=blue][/color] #include<conio.h> #include<stdlib.h> #include<stdio.h> #include<math.h> #include<string.h>
#define maxlen 400 #define result 500
#define base 10
int read_num(int ar[]) { char ch; int i = 0;
while((ch=getchar()) >= '0' && ch <= '9') ar[i++]=(ch - '0'); printf("%d\n", i);
return i; }
void write_num(int ar[], int size) { int i; for(i = 0; i < size; i++) printf("%d", ar[i]); }
void write_res(int ar[], int size) { int i; for(i = size; i >= 0; i--) printf("%d", ar[i]); }
void main(void) { int a,b,h=0; int i=0,j=0,k=0; int num_1[maxlen]={0}; int num_2[maxlen]={0}; int res[result] ={0}; int flag; int tmp=0; char sig;
int carry=0; int div[maxlen]={0}; int l=0;
a=read_num(num_1); write_num(num_1,a); printf("\n"); b=read_num(num_2); write_num(num_2,b); //_______________________________________ printf("\nEnter mathematical action:"); scanf("%c",&sig); switch(sig) {
//---------------------------------------------------- case '+':
flag=0; for(i=a-1,j=b-1;(i >= j ? i : j) >= 0 ;i--,j--) { tmp=num_1[i]+num_2[j]+flag; if(tmp<10) { res[k++]=tmp; flag=0; } else { res[k++]=tmp-10; flag=1; if((i >= j ? i : j) == 0) { res[k]=flag; h++; } } h++; } printf("\n\n\nresultat:"); write_res(res,h-1); break; //---------------------------------------------------- case '-':
flag=0; for(i=a-1,j=b-1;(i >= j ? i : j) >= 0 ;i--,j--) { tmp=num_1[i]-num_2[j]-flag; if(tmp>=0) { res[k++]=tmp; flag=0; } else { res[k++]=10+tmp; flag=1; } h++; } write_res(res,h-1); break; //---------------------------------------------------- case '*': for(j=b-1;j>=0;j--) { for(i=a-1;i>=0;i--) { tmp=num_1[i]*num_2[j]+carry+div[i+j]; div[i+j]=tmp%base; carry=tmp/base; h++; } carry=0; } write_num(div,h-1); } printf("\n"); } [/color]
|
|