-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathadd_mul.c
89 lines (82 loc) · 2.56 KB
/
add_mul.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <stdio.h>
#include "calculator.h"
pDigit mul(pDigit digit, int x){
pNum front = NULL;
pNum back = NULL;
pNum result = NULL;
int beforeSize = 0;
int afterSize = 0;
int new,quo,rem,up; //pop받을 변수, 몫, 나머지, 올림수 처리
if(x != 0){ //정수부분 곱
for(int i = 0; i < digit->beforeSize; i++){
new = popNum(&(digit->before));
quo = new * x / 10;
if(i == 0){
if(quo != 0){
pushNum(&front,quo);
}
}
else
{
pushNum(&front,quo + rem);
}
rem = new * x % 10;
if(i == digit->beforeSize){
pushNum(&front,rem);
}
}
for(int j= 0; j < digit->afterSize; j++){ //소수부분 곱
new = popNum(&(digit->after));
quo = new * x / 10;
if(j == 0){
if(quo > 0){
int f;
f = popNum(&front);
pushNum(&front,f + quo);
}
}
else
{
pushNum(&back,quo + rem);
}
rem = new * x % 10;
if(j == digit->afterSize){
pushNum(&back,rem);
}
}
int up = 0;
for(int a = 0; a < digit->beforeSize; a++){ //정수부분 넣기
int A = popNum(&front) + up; //처음 up은 0이므로 첫번째부터 올림이 발생하지 않음
if (A > 10){
A -= 10;
pushNum(&result,A);
up = 1;
}
else
{
pushNum(&result,A);
up = 0;
}
}
pushNum(&result,46); //정수부분 다 넣고 점 추가
for(int b = 0; b < digit->afterSize; b++){
int B = popNum(&back) + up;
if (B > 10){
B -= 10;
pushNum(&result,B);
up = 1;
}
else
{
pushNum(&result,B);
up = 0;
}
}
pDigit result = initializeDigit();
return result;
}
else
{
return beforeSize, afterSize;
}
}