【问题标题】:The algorithm inverse number [closed]算法倒数
【发布时间】:2017-01-02 19:14:02
【问题描述】:

这是倒数的公式吗?

例如 123-321?

数字是K

inv K= K%100 + K/10%10 * 10 + K % 10 *100

我不确定我写的是否准确,我需要这个权限来完成学校的图形算法任务

编辑:是的,我很愚蠢 xD 我是初学者 xD

【问题讨论】:

  • 我会更多地分开计算以使它们更容易理解,例如units = K %10; tens = ...; hundreds = ...;,然后当数字全部分开时,再次组合它们inv = 100 * units + 10 * tens + hundreds;
  • 你不是很清楚你在问什么。 123-321 是您收到的字符串并且必须验证它是回文吗?你们中的哪些人收到123 并且必须返回321?您收到的号码总是 3 位数吗?
  • 我不需要这个来写程序,但我会画一个3位数的算法。这是好方法还是不好?我的英语很烂,对不起xD
  • 从逻辑的角度来看,你写的看起来是正确的,但它是一个非常具体的问题解决方案。但是,如果您对其进行编码,则可能必须注意操作优先级,因此可能需要添加括号以进行说明。
  • 将数字转换为字符串(库函数)。反转字符串。将该字符串转换为另一个数字(库函数) - 但如果存在前导 0,请注意 octal!然后减去这两个数字。

标签: c++ c algorithm visual-c++ inversion


【解决方案1】:

这个逻辑会帮助你。变量 inverse 是输出。

        int num = 123;
        double inverse = 0;
        while (num != 0)
        {
            inverse = inverse * 10;
            inverse = inverse + num % 10;
            num = num / 10;                
        }

【讨论】:

  • 为什么inverse 的类型是double 而不是int
  • 感谢 J. Piquard 先生的评论...应该是 int。但是 double 也没有问题。
【解决方案2】:

如果您希望您的代码使用任何数字,请考虑转换为字符串,然后将其反转!

int invert( int input )
{
    std::stringstream str;
    str << input;

    std::string s = str.str();
    std::reverse(s.begin(),s.end());

    return atoi( s.c_str() );
}

【讨论】:

  • 我宁愿直接在整数中进行,而不是对字符串进行不必要的转换(顺便说一句,涉及动态内存分配)。
【解决方案3】:
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int i = 123045 , j = 0,k=0;

    while( i != 0 )
        {
        j=i%10;
        k = k *10 + j;
        i /=10;
    }

    printf("%d\n", k);
    return 0;
}

输出 540321

【讨论】:

  • 在 while 循环的每次迭代中,i%10 将从右侧提取第一个数字。此数字由j 转移到k,我们使用整数除法从i 中删除该数字。
  • 这不适用于包含零的数字,例如12305,终止条件错误。
  • 已修改;感谢您提出这个问题!
猜你喜欢
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 2021-06-03
  • 2021-10-28
  • 2018-09-08
  • 2016-11-15
  • 2014-03-02
  • 1970-01-01
相关资源
最近更新 更多