我刚开始学习C#并且只知道真正基本的东西。所以这个问题对你来说可能很容易,但对我来说很难。答案中的细节越多越好。
下一行代码将检查学生编号是真实的还是假的。当所有字符的总和(乘以它们的地点编号)是11的倍数时,该数字是真实的。
Console.WriteLine("What is your studentnumber?");
stnum = Console.ReadLine();
var stnumint = Convert.ToInt32(stnum);
var ans1 = (stnumint % 10 - stnumint % 1) / 1;
var ans2 = (stnumint % 100 - stnumint % 10) / 10;
var ans3 = (stnumint % 1000 - stnumint % 100) / 100;
var ans4 = (stnumint % 10000 - stnumint % 1000) / 1000;
var ans5 = (stnumint % 100000 - stnumint % 10000) / 10000;
var ans6 = (stnumint % 1000000 - stnumint % 100000) / 100000;
var ans7 = (stnumint % 10000000 - stnumint % 1000000) / 1000000;
var control = ans1 * 1 + ans2 * 2 + ans3 * 3 + ans4 * 4 + ans5 * 5 + ans6 * 6 + ans7 * 7;
var endnum = control % 11;
if (endnum == 0)
{
Console.WriteLine("You have got a valid studentnumber.");
}
else
{
Console.WriteLine("Check if your studentnumber is correct. If it is, you are not a student.");
}
以例如studentnumber 9232753为例。当计算:(9 * 7 + 2 * 6 + 3 * 5 + 2 * 4 + 7 * 3 + 5 * 2 + 3 * 1)%11时,答案为0。
如何将这行代码写入较小的循环?
答案 0 :(得分:0)
var totalAns = 0;
for (int i = 1; i <= 10000000; i *= 10)
{
ans += (stnumint % (10*i) - stnumint % i) / i;
}
答案 1 :(得分:0)
这是计算的部分。如果您需要保存stnumint,请将其复制另一个变量。
int stnumint=...; //must be sure, that data type is n
int checksum=0;
int i=1;
while(stnumint>0)
{
checksum=(stnumint%10)*i;
i++;
//in real numbers will look like floor(stnumint/10)
//will automaticly floor because of data type int
stnumint=stnumint/10;
}
答案 2 :(得分:0)
一个等效的循环是:
int control = 0;
int power10 = 1; // var to save an expensive `Math.Power` call
for (int i = 1; i <= 7; i++)
{
control += ((stnumint % (power10*10) - stnumint % power10) / power10) * i;
power10 *= 10;
}
我强烈建议不使用var
内置类型,例如int
,string
等。您可以将结果类型置于左右编译器可以给你意想不到的结果。保存var
,以便在设计时难以(或无法)确定实际类型。