Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何比较任何基数的数字_C++_C_Base - Fatal编程技术网

C++ 如何比较任何基数的数字

C++ 如何比较任何基数的数字,c++,c,base,C++,C,Base,我一直在尝试比较任意基B的两个数字,但没有先将它们改为十进制。有办法吗 我可以把它们转换成十进制。我就是这样做的(以17为基数): 用于(i=strlen(s)-1;i>=0;i--) { 如果(s[i]>='A'&&s[i]数字通过它们的值进行比较。如果它们的符号不同(以基数表示),则相同位置的数字表示其他含义。例如: 10 [10] > 1000 [2] 10 [10] < 10000 [2] 10[10]>1000[2] 10 [10] < 10000 [2] 我想比较两个

我一直在尝试比较任意基
B
的两个数字,但没有先将它们改为十进制。有办法吗

我可以把它们转换成十进制。我就是这样做的(以17为基数):

用于(i=strlen(s)-1;i>=0;i--)
{

如果(s[i]>='A'&&s[i]数字通过它们的值进行比较。如果它们的符号不同(以基数表示),则相同位置的数字表示其他含义。例如:

10 [10] > 1000 [2]
10 [10] < 10000 [2]
10[10]>1000[2]
10 [10] < 10000 [2]
我想比较两个不同基数的值的唯一方法是将它们转换为公共基数,然后进行比较

对于由基数中的数字组成的给定数字,可以使用以下公式计算数字的值:


只需比较各个数字:

//
// Comparing numbers s1 and s2
//

// If they have different length, they are different
length = strlen(s1);
if (strlen(s2) != length)
    return 0;

// Now compare all digits
for (i = 0; i < length; ++i)
{
    if (s1[i] != s2[i])
        return 0; // found different digits - numbers are not equal
}
return 1; // all digits are equal - numbers are equal
//
//比较数字s1和s2
//
//如果它们有不同的长度,它们是不同的
长度=strlen(s1);
if(strlen(s2)!=长度)
返回0;
//现在比较所有数字
对于(i=0;i

通过不计算字符串的长度,可以使实现更小(迭代直到找到终止null
char
).

展示你尝试过的东西,哪些不起作用。它们都是同一个基数,它们在内存中的表示形式是什么?值得思考的是:也许“任何基数”都有点过分。有多少基数?当然有17个以上。也许比英语字母表中的所有字母都要多?也许甚至比可以表示的还要多所有语言的所有字母表的所有字母加在一起?基数10需要10个符号[0-9]。十六进制需要16[0-9,A-F]那么基数1000呢?[0-9,A-Z,A-Z,,?]@MahonriMoriancumer:您不局限于单位数编码。例如,您可以使用整数数组,使1234567变成{1,23,45,67}以100为基数,{1234567}以1000为基数。实际上,您正在将它们转换为二进制,因为这是大多数计算机中
int
的内部表示形式。我还想知道哪一个更大。在比较中,只需将
!=
替换为
(但要注意正确比较长度)
//
// Comparing numbers s1 and s2
//

// If they have different length, they are different
length = strlen(s1);
if (strlen(s2) != length)
    return 0;

// Now compare all digits
for (i = 0; i < length; ++i)
{
    if (s1[i] != s2[i])
        return 0; // found different digits - numbers are not equal
}
return 1; // all digits are equal - numbers are equal