代码阻止循环移位
code blocks cyclic shift
我是C编程的新手,一直在尝试执行这个程序来移动数字。前任。我希望 4567 经历右周期偏移,然后它会变成 7456。
#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
int num;
scanf("%d",&num);
int temp=num;
int flag=0;
while(temp!=0)
{
temp=temp/10;
flag++;
}
int r=num%10;
int s=num/10;
int k=pow(r,flag);
int crs=k+s;
printf("%d",crs);
return 0;
}
你做错的事情是处理最右边的数字(在原始数字中)。你不想把它带到flag
的力量.您想将10
flag
的幂乘以最低有效(最右边)的数字。
在计算数字并确定应移动最低有效数字的步数时,您也应该小心。例如,如果您有123
则有三位数字,但您应该只将最低有效数字向左移动两步(其余数字向右移动一步)。当数字0
时,可能会特别考虑 - 无论如何你都会得到零,这可能是你想要的。此外,您还应该考虑如何处理负数。
像这样:
#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
int num;
scanf("%d",&num);
int temp=num;
int flag=0;
while(temp!=0)
{
temp=temp/10;
flag++;
}
int r=num%10;
int s=num/10;
int k=r*pow(10,flag-1); // <- here's the fix
int crs=k+s;
printf("%d",crs);
return 0;
}
当然还有一些细节。如果您正在C++编程,则不应包含stdio.h
或math.h
。相反,你应该包括cstdio
和cmath
(有些人可能会抱怨使用cstdio
并说你应该使用iostreams
,但这只是一个反对问题)。
您可以使用数学来查找数字中有多少位数字,而无需 for 循环。 只需使用地板(日志10(数字))。
int main(){
int val = 11023;
int rem = val%10;
int positions = (int) floor(log10(val));
int left_digit = rem*(int) pow(10,positions);
printf("%dn", left_digit+val/10);
}
此语句
int k=pow(r,flag);
没有意义。你至少应该我们
int k=pow( 10,flag-1) * r;
但是,如果函数没有重载 int 类型,那么它可以将操作数转换为类型 double
。
实际上,没有必要使用该功能。
程序可以按以下方式编写
#include <iostream>
int main()
{
while ( true )
{
const unsigned int Base = 10;
std::cout << "Enter a non-negative number (0-exit): ";
unsigned int x = 0;
if ( !( std::cin >> x ) || ( x == 0 ) ) break;
unsigned int multiplier = 1;
for ( unsigned int tmp = x; tmp /= Base; ) multiplier *= Base;
std::cout << "The shifted number is " << x / Base + x % Base * multiplier << std::endl;
}
}
它的输出可能看起来像
Enter a non-negative number (0-exit): 567
The shifted number is 756
Enter a non-negative number (0-exit): 0
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么在这个代码结束循环中没有得到结束
- 下面是我为检测链接列表中的循环而制作的代码
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 在java中解决这段代码时面临循环中的问题
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 试图让C++程序循环回到代码中的另一个点
- 使用自动循环时代码崩溃
- C++如何使用指针来循环移位数组元素
- 旧版本的Fortran做循环Manova代码
- cpp 中的十进制右循环移位
- 如何使用 c++ 中的循环生成代码
- Do While和While循环在C++代码中不起作用
- 代码阻止循环移位
- 为什么具有多个嵌套循环的代码可以在 GCC 上立即完成,但在 VS 上需要很长时间
- 逐位旋转(循环移位)
- 我不知道为什么我不能循环整个代码?当我按 y 时"next customer"
- dll在多大程度上加快了循环等代码中的计算速度
- for循环中While循环的代码说明
- 如何使用数组进行两次循环移位