大数相加
-
stringBuild :
String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。
namespace 大数相加
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入一个数");
}
static string BigNumAdd(string num1, string num2)
{
Stack<int> stack1 = new Stack<int>();
Stack<int> stack2 = new Stack<int>();
for(int i = 0; i < num1.Length; i++)
{
stack1.Push((int)num1[i]);
}
for (int i = 0; i < num2.Length; i++)
{
stack1.Push((int)num2[i]);
}
Stack<int> stack3 = new Stack<int>();
int count = (num1.Length > num2.Length ? num1.Length : num2.Length) + 1;
bool IsJinwei = false;
for(int i = 0; i < count; i++)
{
int addnum1 = stack1.Count > 0 ? stack1.Pop() : 0;
int addnum2 = stack2.Count > 0 ? stack2.Pop() : 0;
int sum = addnum1 + addnum2 + (IsJinwei ? 1 : 0);
stack3.Push(sum % 10);
IsJinwei = sum >= 10;
}
//string result = "";
StringBuilder sb = new StringBuilder();
int loopcount = stack3.Count;
for(int i = 0; i < loopcount; i++)
{
if(i == 0 && stack3.Peek() == 0)
{
stack3.Pop();
continue;
}
sb.Append(stack3.Pop());
}
//while(stack3.Count > 0)
//{
// result += stack3.Pop();
//}
return sb.ToString();
}
}
}
思考:
用的是栈的思维做的,将两个数分别存入两个栈中,然后新定义一个栈,将前两个栈中元素进行相加,取%10存入栈中,定义一个变量是否进位,当相加大于10就位true,下一次两数相加时就+1。