[英]( C ) Best way to step x number of times forward in the ASCII-chart but still keeping it between a-z?
基本上你输入一个单词然后输入一个数字。 该程序采用ASCII中的每个字符和步骤。 防爆。 “你好”,数字1返回“ifmmp”。 现在,如果我要输入的数字大于字符的ASCII值和组合的数字,我会得到不是az的字符。 为了保持它在az我做了一个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..25; 其他任何东西都会在整个字母表中做额外的循环。 所以首先用数字%26替换数字。
但这表明你可以完全消除循环。 如果有问题的ASCII码是0..25,那么你可以用(x + number)%26替换ASCII码x。 相反,您通过减去a的ASCII代码将x映射到该范围,执行刚刚描述的数学运算,然后再添加该代码。
使用循环将每个值递增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';
修改char以使ascii char'a'为零,添加您的值,然后生成%26
像那样:
answer[x] = (word[x]-'a'+number)%26+'a';
非常感谢! 之前想出了数学但不知道如何在代码中做到这一点。 不知道v1%v2被分割并返回余数。
为答案干杯:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.