gpt4 book ai didi

c - 将第一个数字与第二个数字交换,将第二个数字与第三个数字交换,等等

转载 作者:行者123 更新时间:2023-11-30 16:56:18 26 4
gpt4 key购买 nike

我得到了一个以这种方式工作的随机校验和算法

  1. 输入数字(最多 1 000 000)
  2. 算法是 n[0]-n[1]+n[2]-n[3],所以它只是对数字的部分进行加减。如果数字是 1243,则 1-2+4-3=0。

如果结果为 0,则校验和通过。如果没有,我需要交换数字:首先与第二个,然后尝试,如果不起作用,第二个与第三个,然后尝试,依此类推。因此,对于 224,通过替换第二个 2 和 4,它会给我 0。

到目前为止我的代码是:

#include <stdio.h>
#include <stdlib.h>

int intlen (long long n)
{
int len = 1;
while ( abs (n) > 9 )
{
n /= 10;
++len;
}
return len;
}
short getDigit (long long num, int index)
{
int pos = intlen (num) - index;
while ( pos > 1 )
{
num /= 10;
--pos;
}
if(intlen(num) <= index) {
return 0;
}
return num % 10;
}
int checkSum(int pin) {
int wynik = 0;
int typ = 0;
int i = 0;
for(i = 0; i < intlen(pin); i=i+3) {
if(typ == 0) {
wynik += getDigit(pin, i) - getDigit(pin, i+1) + getDigit(pin, i+2);
typ = 1;
} else {
wynik -= getDigit(pin, i) - getDigit(pin, i+1) + getDigit(pin, i+2);
typ = 0;
}
}
return wynik;
}
int main()
{
int wynik, pin;
scanf("%d", &pin);
wynik = checkSum(pin);
printf("CS: %d\n", wynik);
system("pause");
return 0;
}

但我真的不知道如何进行交换部分。有人可以告诉我如何做到这一点吗?

最佳答案

也许我不明白你想做什么,但如果我理解正确的话,这就是你所需要的:

#include <stdio.h>
#include <string.h>

int checkSum(char pin[])
{
int wynik = 0;
int sub = 0;
int i = 0;

for (i = 0; i < strlen(pin); i++, sub=!sub)
{
// use pin[I] - '0' to get the number stored in the array location
// use sub?-1:1 * X to either subtract or add by multiplying by -1
wynik = wynik + (sub?-1:1) * (pin[i]-'0');
}

return wynik;
}

int main()
{
char pin[8]; // enough to hold 1000000\0
int wynik;
int swap;
int i=0;

puts("Enter pin:");
scanf("%s", &pin);

// update checksum
wynik = checkSum(pin);
printf("PIN=%s CS=%d\n", pin,wynik);

for (i = 0; wynik != 0 && i < strlen(pin) - 1; i++)
{
// swap pin[i] with pin[i+1]
swap = pin[i]; pin[i] = pin[i+1]; pin[i+1] = swap;

// update checksum
wynik = checkSum(pin);
printf("PIN=%s CS=%d\n", pin,wynik);
}
}

如果您使用数组并且字符串是字符数组,则整个事情会更容易,因此这几乎是完美的 - 要获取某个数组索引处的数字,您唯一需要做的就是从值中减去“0”那个索引。这样做的原因是字符“0”到“9”是连续的。这意味着你不需要 getDigit() 并且 intlen() 可以用 strlen() 代替

关于c - 将第一个数字与第二个数字交换,将第二个数字与第三个数字交换,等等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39949503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com