我必须更改我的号码最后一位和第一位,但不使用仅具有整数或循环的函数。例如从 12345 到 52341
Posted
技术标签:
【中文标题】我必须更改我的号码最后一位和第一位,但不使用仅具有整数或循环的函数。例如从 12345 到 52341【英文标题】:I have to change my number last digit and first digit but without using functions only with integers or loops. For example from 12345 to 52341 【发布时间】:2019-11-09 11:15:05 【问题描述】:#include <iostream>
using namespace std;
int main()
// Here I seperate my number because at first I have to seperate and then I have to change the first digit and last digit.
int numri, shifrat, i = 0, a, shuma = 0, m, d;
cout << "Jep nje numer \n";
cin >> numri;
m = numri;
while (numri != 0)
i++;
numri = numri / 10;
d = pow(10, i - 1);
numri = m;
while (numri != 0)
shifrat = numri / d;
cout << shifrat << " ";
numri = numri % d;
d = d / 10;
//Now after that I have to change the last digit and first digit. Please help me.
//But I'm not allowed to use functions or swap only integers and loops or conditions.
cin.get();
有人可以帮帮我吗?
【问题讨论】:
你知道如何在纸上做吗?如果你有一个带有数字xy
和一个数字z
的数字,你需要什么数学运算才能得到数字xyz
?
这就是我需要知道的。你能解释一下吗?
@Hana 如果创建的数字的值大于最大整数会怎样?例如 1000123039,因此数字是 9000123031?结果不适合 32 位整数。谁分配给你的没有考虑溢出?
【参考方案1】:
它更多的是关于数学而不是其他任何东西。
要获得整数的最后一位,我们可以使用模数:
z = abc....xyz % 10
从我们使用的数字中“删除”那个数字
abc...xy = abc...xyz / 10
(其中/
表示整数除法,即34/10 == 3
)。
我认为这是您已经知道该怎么做的事情。与其深入研究代码,不如先对缺失的部分进行数学计算。
将数字添加到整数中
abc...xyz = (abc...xy * 10) + z
现在你才拥有开始编写代码所需的所有部分:
int main()
int inp;
int outp = 0;
std::cin >> inp; // read_input
while(inp > 0) // reverse
int digit = ... // get_digit
inp = ... // remove_digit
outp = ... // add_digit
std::cout << outp;
很遗憾,您不能使用函数。接下来的一课应该是函数在命名和明确代码方面比 cmets 好得多
int read_input();
int remove_digit(int x);
int add_digit(int x,int digit);
int reverse(int x);
int main()
int inp = read_input();
std::cout << reverse(inp);
【讨论】:
可以,但我不能使用函数 @Hana 对不起,我错过了你标题中的“没有功能”,编辑了答案【参考方案2】:不使用pow
函数也可以编写程序。
你来了。
#include <iostream>
int main()
while ( true )
std::cout << "Enter a non-negative number (0 - exit): ";
unsigned int n;
if ( not ( std::cin >> n ) or n == 0 ) break;
std::cout << '\n';
const unsigned int Base = 10;
unsigned int factor = 1;
while ( not ( n / factor < Base ) ) factor *= Base;
unsigned int last_digit = n / factor;
unsigned int first_digit = n % Base;
n %= factor;
n = n - first_digit + last_digit;
first_digit *= factor;
n = first_digit + n;
std::cout << n << "\n\n";
return 0;
程序输出可能看起来像
Enter a non-negative number (0 - exit): 987654321
187654329
Enter a non-negative number (0 - exit): 12345
52341
Enter a non-negative number (0 - exit): 100
1
Enter a non-negative number (0 - exit): 1
1
Enter a non-negative number (0 - exit): 0
如果这些陈述
if ( not ( std::cin >> n ) or n == 0 ) break;
和
while ( not ( n / factor < Base ) ) factor *= Base;
包含你还不知道的符号,然后你可以像这样重写它们
if ( !( std::cin >> n ) || n == 0 ) break;
和
while ( !( n / factor < Base ) ) factor *= Base;
【讨论】:
不使用 not 怎么写: if ( not ( std::cin >> n ) or n == 0 ) break;这 @Hana 你为什么不喜欢“不”?:) 你可以像 if ( ! ( std::cin >> n ) || n == 0 ) break;而这个 while ( not ( n / factor 因为我不被允许。 @Hana 为什么不允许?!谁说的?【参考方案3】:您可以创建一个包含 4 个变量的程序 - n,给定数字,cn - 创建的数字,u - 给定数字的最后一位数字和 p - 10^p 数字; 您将保存最后 n 位并在其中创建 10^p 数字。然后,使用公式
cn = ((u * p + cn % p) /10) * 10 + n;
您将创建新号码;
#include <iostream>
using namespace std;
int main()
int n, cn, u, p;
cin>>n;
u = n % 10;
cn = n;
p = 1;
while(n>9)
p = p * 10;
n = n / 10;
cn = ((u * p + cn % p) /10) * 10 + n;
cout<<cn;
return 0;
【讨论】:
此解决方案可能会导致溢出。请参阅我在主要部分中的评论。 他只用整数指定。 在上面的主要部分中再次查看我的评论以及示例——输入适合 32 位 int,但输出不适合。它只使用整数,但会产生溢出。这应该很明显,但我想不是。【参考方案4】:交换数字ABCDEF中的第一位和最后一位数字--> FBCDEA
数字 = 12345 资源 = 52341
这个想法是:
52341 = 12345 - 10005 + 50001
第一个数字 fd = num % 10
小数位乘数 df = 1
until num is not zero we do
last digit ld = num
num = num / 10
if num != 0 decimal places multiplier df = df*10
结果 = ABCDEF - F - A*100000 + A + F*100000
int m = numri;
int ld = 0; // last digit(most)
int fd = numri % 10; // first digit(least)
int df = 1; // last digit multiplier 10^n where n is decimal places
while (numri != 0)
ld = numri;// this will be the last digit in last iteration
numri = numri / 10;
if(numri) df = df * 10;
int res = m - fd - ld * df + fd * df + ld;
cout<<res;
示例:
if the num = 12345
fd = 12345 % 10 =5
df = 1
num = 12345 / 10 = 1234
df = df*10 = 10
num = 1234 / 10 = 123
df = df*10 = 100
num = 123 / 10 = 12
df = df*10 = 1000
fd = num = 12
num = 12 / 10 = 1
df = df*10 = 10000
fd = num = 1
num = 1/10 =0
df not changed
loop exit
result = 12345 - 5 - 1*10000 + 1 + 5*10000 = 62341
【讨论】:
最后我必须在哪里写这个? 请添加一些上下文并解释这段代码的作用。只是给 OP 一些代码来复制和粘贴不会有太大帮助,特别是如果这是一些评估。如果 OP 对 c++ 来说真的很新,那就更是如此。 这段代码只是将数字分开,例如 12345 到 1 2 3 4 5。现在我必须用第一个数字更改最后一个数字。 res 不工作它显示相同的数字而不改变任何东西。 其实没有,你能解释一下吗以上是关于我必须更改我的号码最后一位和第一位,但不使用仅具有整数或循环的函数。例如从 12345 到 52341的主要内容,如果未能解决你的问题,请参考以下文章
C语言试题160之某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上 5,然后用和除以 10 的余数代替该数字,再将第一位和第四位交换,第二位和第三位