C# 试图在c中将dec转换为十六进制,但每次我尝试这段代码都失败了,为什么?
这是我得到的密码。 我正试图修复它,但我找不到我的代码有什么问题。 代码开始失效的点在if内, 我做错什么了吗C# 试图在c中将dec转换为十六进制,但每次我尝试这段代码都失败了,为什么?,c#,C#,这是我得到的密码。 我正试图修复它,但我找不到我的代码有什么问题。 代码开始失效的点在if内, 我做错什么了吗 class Program { static void Main(string[] args) { double division; double chosenNumber; int intDivision; int remainder = 1; int fullNumber = 0;
class Program
{
static void Main(string[] args)
{
double division;
double chosenNumber;
int intDivision;
int remainder = 1;
int fullNumber = 0;
int numberOfTimes = 0;
Console.WriteLine("Choose a number");
chosenNumber = int.Parse(Console.ReadLine());
do
{
division = chosenNumber / 16;
intDivision = Convert.ToInt32(chosenNumber) / 16;
remainder = Convert.ToInt32((division - intDivision) * 16);
if (numberOfTimes != 0)
{
fullNumber = numberOfTimes ^ 10 * remainder + fullNumber;
}
else
{
fullNumber = remainder;
}
numberOfTimes++;
chosenNumber = intDivision;
} while (remainder > 0);
Console.WriteLine(fullNumber);
}
我对你已经拥有的东西有一些自由,不,我不能说它有什么问题,但这似乎有点好。我希望有帮助
static void Main(string[] args)
{
Console.WriteLine("Choose a number");
int chosenNumber = Convert.ToInt32(Console.ReadLine());
int remainder;
string result = string.Empty;
while (chosenNumber > 0)
{
remainder = chosenNumber % 16;
chosenNumber /= 16;
result = remainder.ToString() + result;
}
Console.WriteLine(result);
Console.Read();
}
这将是我的解决方案(基本上与Eva相同,但具有“内置”输入处理)
int chiffre=0;
int-rem=0;
字符串val=”“;
Console.WriteLine(“选择一个数字”);
if(int.TryParse(Console.ReadLine(),out chiffre))
{
while(chiffre!=0)
{
rem=chiffre%16;
如果(rem<10)
rem+=48;//0的ascii键
其他的
rem+=55;
chiffre/=16;
val=(char)rem+val;
}
}
控制台写入线(val);
}
fullNumber=numberOfTimes^10*余数+fullNumber;
^10
应该是位异或吗?否则,您可能会将^
与Math.Pow(x,y)
混淆,这反过来会导致函数中的未定义行为
在任何情况下,我建议您使用Eva或我的解决方案,因为这是编写此类函数的更惯用版本(也适用于任何基)。您所说的“失败”是什么意思。有例外吗?哪个?此外,还有用于解析十六进制数字的内置函数(例如int.Parse with NumberStyles.allowehexspecifier);不需要重新发明轮子。如果你能提供至少7个输入,以及这7个输入中的每一个的预期结果,那就太棒了。另外,请解释为什么25个输入得到16个。看着我,我有点困惑,为什么这是预期的结果。它的可能重复可能有助于思考“十六进制”的真正含义。这是一种以16为基数编码数字的方法,使用字符a..F表示0..9以外的数字。在C#中,只有两种实用的数据类型可以存储这样的数字,它们是char[]和string。使用double只能产生无意义的结果,它在显示时使用机罩下的底座2和底座10。将fullNumber改为string以获得成功。这很有效,我想知道将来会发生什么问题。
int chiffre = 0;
int rem = 0;
string val = "";
Console.WriteLine("Choose a number");
if(int.TryParse(Console.ReadLine(), out chiffre))
{
while (chiffre != 0)
{
rem = chiffre % 16;
if (rem < 10)
rem += 48; // ascii key for 0
else
rem += 55;
chiffre /= 16;
val = (char)rem + val;
}
}
Console.WriteLine(val);
}
fullNumber = numberOfTimes ^ 10 * remainder + fullNumber;