繁体   English   中英

C中的分割位数之和

[英]sum of splitted digits in C

我想在将给定数字(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;
   }

和我使用功能,但似乎没有任何作用!

我的输入: 555555

我的输出:555655>与555556相同(递增1,但倒数最后3位)。

预期输出:555564(作为前3位数字的总和==后3位数字)。

我重新编写了它,以使其变得更简单,更直接。

我想出了这个:

IDEOne链接:

#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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM