1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

C: String arithmetic

  1. Jan 13, 2016 #1
    1. The problem statement, all variables and given/known data
    Write a program (without using GMP library - https://gmplib.org) which performs arithmetic operations on large positive integers (addition, subtraction, multiplication and division). Maximum number of digits in one number is 100.
    Large number is the number that can't be represented by standard data types (long long, ...), and it is represented as a string.
    Then allow incrementing and decrementing of a string, and finding the smallest and the largest string in an array of n strings.

    2. The attempt at a solution

    How would you do incrementing, decrementing and comparing Bignum strings?
    Here is the addition:
    Code (Text):

        #include<stdio.h>
        #define MAX 100//max. number of digits
        typedefstruct
        {
            int arr[MAX];//array for one number
        }NUMBER;
        void read(NUMBER *add_num)//read one number
        {
            int i,digit=0;
            char ch[101];
            scanf("%s",ch);

            while(ch[digit])//number of digits
                digit++;

            for(i=0;i < MAX;i++)
            {
                digit--;
                if(digit >=0)
                    add_num->arr[i]=ch[digit]-'0';//int to char
                else
                    add_num->arr[i]=0;
            }
        }

        void addition(NUMBER a,NUMBER b,NUMBER *add_res)//add two Bignum strings
        {
            int carry=0;
            int i,temp;
            for(i=0;i < MAX;i++)
            {
                temp=a.arr[i]+b.arr[i]+carry;//sum
                add_res->arr[i]=temp %10;//resulting digit
                carry=temp /10;//store carry
            }
        }

        voidprint(NUMBER *add_num)//print result
        {
            int i;

            for(i=MAX-1;add_num->arr[i]==0;i--);//skip the leading zeros

            for(;i>=0;i--)
                printf("%d",add_num->arr[i]);
        }
        int main()
        {
            NUMBER x,y,z;
            printf("enter two positive integers: \n");
            read(&x);
            read(&y);
            printf("addition result: ");
            addition(x,y,&z);
            print(&z);
            return0;
        }
     
     
  2. jcsd
  3. Jan 13, 2016 #2

    mfb

    User Avatar
    2016 Award

    Staff: Mentor

    Incrementing is just adding 1, and decrementing is subtracting 1 (or adding 9999.....99 and ignoring the overflow)

    How do you compare numbers like those by eye? The same can be done in code.
    Code (Text):
    35356959849283293
    35846625235464635
     4735939384293894
     
  4. Jan 13, 2016 #3

    Mark44

    Staff: Mentor

    There are a couple of missing spaces in your code, below.
    typedefstruct needs a space after typedef
    voidprint needs a space after void
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted



Similar Discussions: C: String arithmetic
  1. C++ strings help (Replies: 2)

  2. Strings in C (Replies: 6)

  3. Help with C++ strings (Replies: 3)

Loading...