Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * 103.c
- *
- * Created on: 25 ะพะบั. 2014 ะณ.
- * Author: ulgish
- */
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #define MAX(A,B) ((A)>(B)?(A):(B))
- #define MIN(A,B) ((A)<(B)?(A):(B))
- typedef unsigned char byte;
- typedef struct{
- byte* val;
- int size;
- }number;
- number* number_create(const char* s){
- number* ret = (number*) malloc(sizeof(number));
- ret->size = strlen(s);
- ret->val = (byte*) calloc(ret->size, sizeof(byte));
- int i;
- for (i = 0; i < ret->size; i++){
- ret->val[ret->size-1-i] = s[i]-48;
- }
- return ret;
- }
- number* number_sum(number* a, number* b){
- number* ret = (number*) malloc(sizeof(number));
- ret->size = MAX(a->size, b->size) + 1;
- ret->val = (byte*) calloc(ret->size, sizeof(byte));
- int i;
- byte carry = 0;
- int min_len = MIN(a->size, b->size);
- for (i = 0; i < min_len; i++){
- ret->val[i] = (a->val[i] + b->val[i] + carry)%10;
- carry = (a->val[i] + b->val[i] + carry)/10;
- }
- number* tmp = a;
- if (a->size < b->size){
- tmp = b;
- }
- if (a->size != b->size)
- while(i < (ret->size -1)){
- ret->val[i] = (tmp->val[i] + carry)%10;
- carry = (tmp->val[i] + carry)/10;
- i++;
- }
- ret->val[ret->size-1] = carry;
- return ret;
- }
- void number_print(number* a){
- int i = a->size - 1;
- while (i >= 0 && !(a->val[i])){
- i--;
- }
- if (i < 0){
- printf("0");
- }else{
- int len = i+1;
- char* s = (char*) calloc(len+1, sizeof(char));
- int j = 0;
- while (j < len){
- s[j] = (char)(a->val[len-1-j]+48);
- j++;
- }
- s[len] = '\0';
- printf("%s", s);
- }
- }
- int main(){
- char sa[101], sb[102];
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- scanf("%s %s", sa, sb);
- number* a = number_create(sa);
- number* b = number_create(sb);
- number* c = number_sum(a,b);
- number_print(c);
- printf("\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement