基本上你输入一个单词然后输入一个数字。该程序采用ASCII中的每个字符和步骤。防爆。 “你好”,数字1返回“ifmmp”。 现在,如果我输入的数字大于字符的ASCII值和组合的数字,我会得到不是a-z的字符。为了使它保持在a-z,我做了一个while循环,我的问题是:
如果输入的值为5000,我可以不循环5000次吗?
(单词,数字,答案和x先前声明)
int countNumber = word[x];
int countComplete = word[x];
if(word[x] + number > 122){
while(countNumber != number) {
if(countComplete == 122){
countComplete = 97;
countNumber++;
}
else{
countNumber++;
countComplete++;
}
}
answer[x] = countComplete;
x++;
}
else{
answer[x] = word[x] + number;
x++;
}
答案 0 :(得分:2)
哦,我的。
首先,唯一重要的数字是0..25;其他任何东西都会在整个字母表中做额外的循环。因此,首先用数字%26替换数字。
但这表明你可以完全消除循环。如果有问题的ASCII码是0..25,那么你可以用(x + number)%26替换ASCII码x。相反,您通过减去a的ASCII代码将x映射到该范围,执行刚刚描述的数学运算,然后再添加该代码。
答案 1 :(得分:0)
使用循环将每个值递增1并不是您想要的...您只需一次累积,然后进行单次循环(如果需要回绕)。
要做的第一件事是将大数字减少到仍然具有相同结果的最小数字。由于在回绕之前只有26个值,因此您只需设置number = number % 26;
或更一般地设置number = number % (1 + 'z' - 'a');
接下来,做积累; answer[x] = word[x] + number;
最后处理环绕:if ([answer[x] > 'z') answer[x] = answer[x] + 'a' - 'z';
答案 2 :(得分:0)
修改char以使ascii char'a'为零,添加你的值,然后制作%26
像那样:answer[x] = (word[x]-'a'+number)%26+'a';
答案 3 :(得分:0)
非常感谢!之前想出了数学但不知道如何在代码中做到这一点。不知道v1%v2被分割并返回剩余部分。
为答案干杯:)