【问题标题】:Check if adding the corresponding decimal digits of two numbers produces the same value in each place检查添加两个数字的相应十进制数字是否在每个位置产生相同的值
【发布时间】:2018-01-26 08:34:57
【问题描述】:

我需要检查两个数字中十进制数字的垂直和是否在每个元素中都相同。

例如:Number1 = 153, Number2 = 345。小数位单独相加:

1 + 3 = 4
5 + 4 = 9
3 + 5 = 8

所以 153 和 345 不匹配。


但如果 Number1 = 543 且 Number2 = 456:

5 + 4 = 9
4 + 5 = 9
3 + 6 = 9

数字和都是9,所以函数结果应该是true

好像我需要使用模数和 while 循环?

任何意见将不胜感激!

【问题讨论】:

  • 567 和 765 怎么样?这是一个有效的匹配吗?我认为是这样,因为数字总和始终相同,为 12。我认为,只有@Mike 的答案会处理这个问题。

标签: c algorithm


【解决方案1】:

使用伪代码,我相信它可以实现这样的事情。函数返回 0 = 假,1 = 真。我不确定mod 是否是 C 函数,但由于您只要求“C-like”,我认为它应该足够了。

int compare(int a, int b)
{
    int compareTo = -1;
    while(a > 0 && b > 0)
    {
        int temp = (a mod 10) + (b mod 10);
        if (compareTo == -1)
        {
            compareTo = temp;
        }
        else 
        {
            if (compareTo != temp) 
                return 0;
        }
        a /= 10;
        b /= 10;
    }
    return 1;
}

根据@Peter 的评论进行编辑:

unsigned int compare(unsigned int a, unsigned int b)
{
    unsigned int compareTo = (a % 10) + (b % 10);
    a /= 10;
    b /= 10;  
    while(a > 0 && b > 0)
    {
        unsigned int temp = (a % 10) + (b % 10);

        if (compareTo != temp)
            return 0;

        a /= 10;
        b /= 10;  
    }
    return 1;
}

【讨论】:

  • 在循环外以int compareTo = (a % 10) + (b % 10)` 开头,因此您无需检查循环内的-1 标记值。此外,您可能希望使用无符号整数执行此操作,因为 OP 尚未指定如何处理负输入。
【解决方案2】:

我用伪代码写了这个,因为我更熟悉 Java。我也没有考虑数字是否不同。假设它们的位数相同,则此流程应该有效:

int number1 = 153;
int number2 = 345;
int number1Length = String.valueOf(number1).length();
int number2Length = String.valueOf(number2).length();
int digit1Sum = null;
int digit2Sum = null;
int digit3Sum = null;
for (int i = 0, n = number1Length; i < n; i++){
    String character1Iterator = String.valueOf(number1).getChar(i);
    String character2Iterator = String.valueOf(number2).getChar(i);

   digit{i}Sum = Integer.parseInt(character1Iterator) + Integer.parseInt(character2Iterator);
}

boolean digitsEqual = false;
if(digit1Sum == digit2Sum && digit1Sum == digit3Sum){
    return true;
}

您可能需要稍微重构以适应您对不同数量数字的需求,以适应 C 等,但这基本上是获取每个数字的第一个值并添加它。然后它遍历每个数字并将它们相加,直到所有数字位置相加。然后它会检查以确保它们都相等。

【讨论】:

  • @Mike 的答案对于最低有效数字中的不匹配要有效得多,因为它具有提前退出功能,甚至可以避免执行 /10%10 工作。您至少可以从最不重要的数字开始循环,而不是硬编码 3 位数字。
猜你喜欢
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2017-11-02
  • 2014-02-03
  • 1970-01-01
相关资源
最近更新 更多