【问题标题】:Compare two number's positional notation比较两个数字的位置表示法
【发布时间】:2016-01-22 23:36:00
【问题描述】:

给定两个数字。我想比较这两个数字的位置符号。

说数字 1 是:25000 说数字 2 是:25000

结果就是面具。如果每个位置都匹配,则掩码(在这种情况下)为:6

说数字 1 是:00000 说数字 2 是:22220

那么掩码为 1,因为只有第一位匹配。

我的逻辑是,如果两个数字的长度不相等,那么它会打印出它不相等,并且什么也不做。但如果它们匹配,那么我将它们转换为整数。之后,我用 2 个 for 循环检查它们各自的数字是否相等。如果是,那么我在 maszk 变量中加一。

我的代码在下面是错误的(我已经输入了标题并声明了变量和 getline。)有人可以帮忙吗?

#include <stdio.h>
if( strlen(s) != strlen(s2) ) printf("The length doesn't match! \n");


else {


for(i=0; i<=20; i++)
{

 for(j=0; j<=20; j++)
    {
    szam1[i] = atoi(s);
    szam2[j] = atoi(s2);

    }
  if( szam1[i] == szam2[j] ) maszk++;

}
}

printf("The mask of the two numbers: %d", mask);

}

【问题讨论】:

  • 将数字保留为字符串,从两个字符串的末尾开始使用charAt()并更新mask直到条件为真。你不需要两个 for 循环。
  • 我不清楚为什么第一个示例中的结果是 6(完全一致)。毕竟(十进制)表示中只有五个字符。在第二个示例中,您有结果 1,其中唯一的协议位于首位(个位数)。

标签: loops variables for-loop


【解决方案1】:

我不知道你的错误在哪里,但我想出了这个算法——可能更简单:

Given two numbers A and B...
m = max(digits(A), digits(B))
maxMask = m + 1
s = A-B 
if (s == 0)
    mask = maxMask
else
    mask = 0
    loop m times
      if (s % 10 == 0)
        mask++
        s /= 10
      else
        break

也就是说,减去它们。如果结果为零,则掩码为 1 + 最大位数。如果不是,则无论结果有多少个尾随零,掩码都是如此。

另外,您可以考虑重命名该变量。 “掩码”经常用于表示something else

【讨论】:

    猜你喜欢
    • 2017-05-18
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 2018-08-13
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多