я был дан алгоритм случайной контрольной суммы, которое работает таким образомсвоп первое число со вторым, второй с третьим и так далее
- ввести номер (до 1 000 000)
- алгоритм п [ 0] -n [1] + n [2] -n [3], так что это просто добавление и вычитание частей числа. Если число равно 1243, то 1-2 + 4-3 = 0.
Если результат равен 0, тогда контрольная сумма прошла. Если нет, мне нужно поменять номера: сначала со вторым, затем попробуйте, если не получится, второй с третьим, затем попробуйте и так далее. Так что для 224 это дало бы мне 0, заменив второй 2 и 4.
Пока мой код:
#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;
}
Но я не знаю о том, как сделать подкачку часть. Может ли кто-нибудь просветить меня, как это сделать?
Выясните, какая цифра больше. Вычтите разницу (между '0' и' 9') с большей цифры и добавьте ее к младшей цифре. Но я бы предложил загрузить ваш номер в массив, чтобы упростить обмен. – Charles
Весь код будет проще, если бы это был массив ... –