1*3*5*7....*1997
看见别人的blog里有个问题是这样的:1*3*5*7....*1997的值是多少,它是用数组解决的,觉得不是很好,它定义了一个4000维的数组,然而这个4000是怎么得出的?不知道,因此,我用双向链表解决此问题:
using System;

class Node
{
int _data;
public Node before;
public Node next;
public Node(int data)
{
_data = data;
before = null;
next = null;
}
public int data
{
get { return _data;}
set { _data = value;}
}
}
class multiply
{
Node head, tail;
public multiply(int data)
{
head = tail = new Node(data);
}
public void AddNode(int data)
{
Node t = new Node(data);
t.before = tail;
tail.next = t;
tail = t;
}
public void multi(int d)
{
Node c = head;
int n = 0;
while (c!=null)
{
int t = c.data * d + n;
c.data = t % 10;
n = t / 10;
c = c.next;
}
while (n > 0)
{
AddNode(n%10);
n /= 10;
}
}
public void print()
{
Node c = tail;
while(c != null)
{
Console.Write(c.data);
c = c.before;
}
}
}
class program
{
public static void Main()
{
multiply m = new multiply(1);
for (int i = 2; i<6; i++)
{
m.multi(i*2 - 1);
}
m.print();
}
}
using System;
class Node
{
int _data;
public Node before;
public Node next;
public Node(int data)
{
_data = data;
before = null;
next = null;
}
public int data
{
get { return _data;}
set { _data = value;}
}
}
class multiply
{
Node head, tail;
public multiply(int data)
{
head = tail = new Node(data);
}
public void AddNode(int data)
{
Node t = new Node(data);
t.before = tail;
tail.next = t;
tail = t;
}
public void multi(int d)
{
Node c = head;
int n = 0;
while (c!=null)
{
int t = c.data * d + n;
c.data = t % 10;
n = t / 10;
c = c.next;
}
while (n > 0)
{
AddNode(n%10);
n /= 10;
}
}
public void print()
{
Node c = tail;
while(c != null)
{
Console.Write(c.data);
c = c.before;
}
}
}
class program
{
public static void Main()
{
multiply m = new multiply(1);
for (int i = 2; i<6; i++)
{
m.multi(i*2 - 1);
}
m.print();
}
}


浙公网安备 33010602011771号