笔者给读者两个小任务,锻炼一下读者的思维能力,这对以后的编程是有好处的。
小任务1:不使用强制类型转换操作把字符串转化为数字,比如把“-123”转化为-123(需要考虑正负数的情况)
小提示:
可以把字符减去'0'得到字符所代表的数字。比如'3'-'0'=3,也就实现了从代表数字的字符转化为了数字。
可以考虑把单个数字乘以10的N次方累加的方法来得到一个数字。比如123=1*100+2*10+3*1。
参考程序如下:
//不使用强制类型转换操作把字符串转化为数字
string s = "-0001234567890"; //在代码中考虑了正负数的情况
double iResult = 0; //存放结果
int tmp = 1; //输出前把结果乘以这个数用于处理正负数的情况
if (!char.IsNumber(s[0])) //如果字符串第一个字符不是数字
{
if (s.IndexOf('-') == 0) //如果字符串第一个字符是'-'
{
s = s.TrimStart('-'); //去除第一个字符
tmp = -1; //结果乘以-1就得到了负数
}
else if (s.IndexOf('+') == 0) //如果字符串第一个字符是'+'
s = s.TrimEnd('+'); //去除第一个字符'+'
else
return; //直接返回
}
for (int i = 0; i < s.Length; i++)
{
char c = s[i]; //得到当前字符
int iCurrentNum = c - '0'; //把字符转化为整数
iResult += iCurrentNum * Math.Pow(10, s.Length - i - 1); //如果加上当前数字*10的N次方
//其实原理就是123=1*10的次方+2*10的一次方+3*10的次方
}
iResult *= tmp;
Console.WriteLine(iResult);
string s = "-0001234567890"; //在代码中考虑了正负数的情况
double iResult = 0; //存放结果
int tmp = 1; //输出前把结果乘以这个数用于处理正负数的情况
if (!char.IsNumber(s[0])) //如果字符串第一个字符不是数字
{
if (s.IndexOf('-') == 0) //如果字符串第一个字符是'-'
{
s = s.TrimStart('-'); //去除第一个字符
tmp = -1; //结果乘以-1就得到了负数
}
else if (s.IndexOf('+') == 0) //如果字符串第一个字符是'+'
s = s.TrimEnd('+'); //去除第一个字符'+'
else
return; //直接返回
}
for (int i = 0; i < s.Length; i++)
{
char c = s[i]; //得到当前字符
int iCurrentNum = c - '0'; //把字符转化为整数
iResult += iCurrentNum * Math.Pow(10, s.Length - i - 1); //如果加上当前数字*10的N次方
//其实原理就是123=1*10的次方+2*10的一次方+3*10的次方
}
iResult *= tmp;
Console.WriteLine(iResult);
小任务2:不使用强制类型转换操作把数字转化为字符串,比如把-123转化为“-123”(需要考虑正负数的情况)。
小提示:
可以考虑把数字除以10取余获得最后一位数字。比如123%10=3,则最后一位为3。取得最后一位后把数字减去最后一位然后再除以10,不断重复。比如(123-3)/10=12。第二次循环就从12中获取2这个数字。
参考程序如下:
//不使用强制类型转换操作把数字转化字符串
int iNum = -123456; //在代码中考虑正负数的情况
bool b = iNum < 0; //是否负数
iNum *= b ? -1 : 1; //是负数则转换为正数
string sResult = ""; //存放结果
while (iNum % 10 != 0) //从最后一位开始逐一获得数字
{
int iCurrentNum = iNum % 10; //取得当前数字,比如第一次数循环iCurrentNum=6,第二次循环iCureentNum=5
sResult += iCurrentNum; //把数字加入字符串,比如第一次循环sResult=6,第二次循环sResult=65
iNum -= iCurrentNum; //减去当前数字,比如第一次循环iNum=123450,第二次循环iNum=12340
iNum /= 10; //除以10,比如第一次循环iNum=12345,第二次循环iNum=1234
}
//把字符串反转
char[] arr = sResult.ToCharArray(); //把字符串打为字符数组
sResult = ""; //清空字符串
for (int i = arr.Length - 1; i >= 0; i--) //从最后一位开始逐一加入字符
sResult += arr[i];
Console.WriteLine(b ? "-" + sResult : sResult);
int iNum = -123456; //在代码中考虑正负数的情况
bool b = iNum < 0; //是否负数
iNum *= b ? -1 : 1; //是负数则转换为正数
string sResult = ""; //存放结果
while (iNum % 10 != 0) //从最后一位开始逐一获得数字
{
int iCurrentNum = iNum % 10; //取得当前数字,比如第一次数循环iCurrentNum=6,第二次循环iCureentNum=5
sResult += iCurrentNum; //把数字加入字符串,比如第一次循环sResult=6,第二次循环sResult=65
iNum -= iCurrentNum; //减去当前数字,比如第一次循环iNum=123450,第二次循环iNum=12340
iNum /= 10; //除以10,比如第一次循环iNum=12345,第二次循环iNum=1234
}
//把字符串反转
char[] arr = sResult.ToCharArray(); //把字符串打为字符数组
sResult = ""; //清空字符串
for (int i = arr.Length - 1; i >= 0; i--) //从最后一位开始逐一加入字符
sResult += arr[i];
Console.WriteLine(b ? "-" + sResult : sResult);