如何更改c中整数中数字的位置
how to change postition of digits in an integer in c
问题如下:
我需要编写一个函数,它接受一个四位整数,然后以这种方式加密该数字:取每个数字并将其替换为 (c + 7)% 10;
然后将第一个数字与第三个数字交换,第二个数字与最后一个数字交换;
然后 returns 加密的整数。
到目前为止,我已经写了这么多代码:
#include<stdio.h>
#include <stdlib.h>
#define N 100
int encrypt(int a){
int n=0,i;
for (i=0;i<4;i++){
n = a%10;
a = a/10;
n = (n+7)%10;
}
}
void main()
{
int a;
printf("Enter the four digit integer: ");
scanf("%d",&a);
encrypt(a);
}
我得到了正确的转换输出,但我不知道如何交换数字的位置。
试试这个
int encrypt(int num) {
int arr[4];
int i = 0;
arr[0] = (num / 1000);
arr[1] = (num / 100) % 10;
arr[2] = (num / 10) % 10;
arr[3] = num % 10;
for (; i < 4; i++) {
arr[i] = (arr[i] + 7) % 10;
}
return arr[2] * 1000 + arr[3] * 100 + arr[0] * 10 + arr[1];
}
每个数字由 4 位表示。
因此您可以使用移位运算符根据您的要求移动数字。
n << 8 应该将您的第一个数字移到第三个数字的位置
secDig = ((num >> 4 ) & 0x0F) 将给出您的第二个数字
现在 secDig << 12 应该将您的第二个数字移到最后 [即第 4 个数字]
希望对您有所帮助。
所以简单的答案是正确使用按位运算符 << [左移]、>> [右移] 和 & [按位与]。
希望对您有所帮助
你可以这样取一个数组:
int encrypt(int a)
{
int i,x[4];
for (i=0;i<4;i++)
{
x[i]=((a%10)+7)%10;
a=a/10;
}
return x[2]+(10*x[3])+(100*x[0])+(1000*x[1]);
}
最简单的解决方案是:
int encrypt(int value) {
int first = value / 1000;
int second = (value / 100) % 10;
int third = (value / 10) % 10;
int fourth = value % 10;
first = (first + 7) % 10;
second = (second + 7) % 10;
third = (third + 7) % 10;
fourth = (fourth + 7) % 10;
return third * 1000 + fourth * 100 + first * 10 + second;
}
对 Aleksandar Makragić 的 略作补充,以在 return 值 <1000 时考虑前导零,例如输入:1234 => 输出:0189 或者输入:3333 => 输出:0000:
printf("Output:\t%04d\n", output);
问题如下: 我需要编写一个函数,它接受一个四位整数,然后以这种方式加密该数字:取每个数字并将其替换为 (c + 7)% 10; 然后将第一个数字与第三个数字交换,第二个数字与最后一个数字交换; 然后 returns 加密的整数。 到目前为止,我已经写了这么多代码:
#include<stdio.h>
#include <stdlib.h>
#define N 100
int encrypt(int a){
int n=0,i;
for (i=0;i<4;i++){
n = a%10;
a = a/10;
n = (n+7)%10;
}
}
void main()
{
int a;
printf("Enter the four digit integer: ");
scanf("%d",&a);
encrypt(a);
}
我得到了正确的转换输出,但我不知道如何交换数字的位置。
试试这个
int encrypt(int num) {
int arr[4];
int i = 0;
arr[0] = (num / 1000);
arr[1] = (num / 100) % 10;
arr[2] = (num / 10) % 10;
arr[3] = num % 10;
for (; i < 4; i++) {
arr[i] = (arr[i] + 7) % 10;
}
return arr[2] * 1000 + arr[3] * 100 + arr[0] * 10 + arr[1];
}
每个数字由 4 位表示。 因此您可以使用移位运算符根据您的要求移动数字。
n << 8 应该将您的第一个数字移到第三个数字的位置
secDig = ((num >> 4 ) & 0x0F) 将给出您的第二个数字
现在 secDig << 12 应该将您的第二个数字移到最后 [即第 4 个数字]
希望对您有所帮助。
所以简单的答案是正确使用按位运算符 << [左移]、>> [右移] 和 & [按位与]。
希望对您有所帮助
你可以这样取一个数组:
int encrypt(int a)
{
int i,x[4];
for (i=0;i<4;i++)
{
x[i]=((a%10)+7)%10;
a=a/10;
}
return x[2]+(10*x[3])+(100*x[0])+(1000*x[1]);
}
最简单的解决方案是:
int encrypt(int value) {
int first = value / 1000;
int second = (value / 100) % 10;
int third = (value / 10) % 10;
int fourth = value % 10;
first = (first + 7) % 10;
second = (second + 7) % 10;
third = (third + 7) % 10;
fourth = (fourth + 7) % 10;
return third * 1000 + fourth * 100 + first * 10 + second;
}
对 Aleksandar Makragić 的
printf("Output:\t%04d\n", output);