代码之家  ›  专栏  ›  技术社区  ›  Mustafa Jamal

C中拆分数字的总和

  •  0
  • Mustafa Jamal  · 技术社区  · 9 年前

    我想将一个给定的数字(6位)在递增1后拆分为2个数字(每个数字3位),然后对前3位和后3位求和,并检查总和是否匹配,再次执行该过程,最后返回第一位和后3位总和相等的数字。
    我的代码将数字拆分,但最后3位数字以某种方式打印颠倒(这不是问题,因为我只需要它们的总和)

        int onceInATram(int x) {
           // Complete this function
           int n = 0;
           int y = 0;
           int len = 0;
           int digit = 0;
           int t1 = n;
           int t2 = y;
           int reminder1 = 0;
           int reminder2 = 0;
           int sum1 = 0;
           int sum2 = 0;
    
           len = (int) floor(log10(abs(x))) + 1;
    
           do {
               n = x + 1;  // to add 1 to the number
               while ((floor(log10(abs(n)) + 1) > len / 2)) {  // split it by half
                   digit = n % 10;
                   n = n / 10;
                   y = (y * 10) + digit;
               }  
    
               int l = 3;
               while (l--) {
                    reminder1 = t1 % 10;
                    sum1 = sum1 + reminder1;
                    t1 = t1 / 10;
    
                    reminder2 = t2 % 10;
                    sum2 = sum2 + reminder2;
                    t2 = t2 / 10;
                 }
    
            } while (sum1 != sum2);
    
    
             //return(printf("%d\n%d\n", n, y));  // for debugging
            return printf("%d%d\n", n, y);      // '' '' 
            //return printf("%d\n", sum1);      // '' ''
        }
    
        int main() {
           int x;
           scanf("%i", &x);
           int result_size;
           char* result = (char *) onceInATram(x);
           printf("%s\n", result);
            return 0;
       }
    

    我使用了函数,但似乎没有任何效果!

    我的输出:555655>与55555 6相同(增加1,但倒转最后3位)。

    1 回复  |  直到 9 年前
        1
  •  0
  •   abelenky    9 年前

    我重新编写了它,试图变得更简单、更直接。

    我想到了这个:

    IDEOne Link:

    #include <float.h>
    #include <math.h>
    #include <stdlib.h>
    
     int onceInATram(int n) {
           int y = 0;
           int x = 0;
           int t1 = n;
           int t2 = y;
           int reminder1 = 0;
           int reminder2 = 0;
           int sum1 = 0;
           int sum2 = 0;
    
    
           do {
               n = n + 1;     // to add 1 to the number
               y = n % 1000;  // This is the first 3 numbers
               x = n / 1000;  // This is the last 3 numbers
    
               printf("%d is now split into %d and %d\n", n, x, y);
    
               t1 = x;
               t2 = y;
               sum1 = 0; 
               sum2 = 0;
               for(int l=0; l<3; ++l) {
                    reminder1 = t1 % 10;
                    sum1 = sum1 + reminder1;
                    t1 = t1 / 10;
    
                    reminder2 = t2 % 10;
                    sum2 = sum2 + reminder2;
                    t2 = t2 / 10;
                 }
            } while (sum1 != sum2);
    
    
            return 1000*x+y;
        }
    
        int main() {
           int x;
           scanf("%d", &x);
           int result = onceInATram(x);
           printf("The Final Answer is %d\n", result);
            return 0;
       }
    

    123456
    The Final Answer is 123501
    

    因为 1 + 2 + 3 == 6 == 5 + 0 + 1

    推荐文章