using System;
using System.Collections.Generic;
using System.Text;
namespace TestFactorial
{
/**//// <summary>
/// 10机制正整数类
/// </summary>
public class DecimalNumber
{
List<byte> _Data;
public List<byte> Data
{
get
{
return _Data;
}
}
public int Length
{
get
{
return _Data.Count;
}
}
public DecimalNumber()
{
_Data = new List<byte>();
}
public DecimalNumber(byte[] data)
{
foreach (byte b in data)
{
System.Diagnostics.Debug.Assert(b >= 0 && b <= 9);
}
_Data = new List<byte>(data);
}
public DecimalNumber(List<byte> data)
{
foreach (byte b in data)
{
System.Diagnostics.Debug.Assert(b >= 0 && b <= 9);
}
_Data = data;
}
/**//// <summary>
/// 1位10机制数和10进制序列相乘
///
/// </summary>
/// <param name="s">10进制序列</param>
/// <param name="d">1位10机制数</param>
/// <param name="power">10的幂数</param>
/// <returns></returns>
private static List<byte> Multiply(List<byte> s, byte d, int power)
{
System.Diagnostics.Debug.Assert(power >= 0);
System.Diagnostics.Debug.Assert(d >= 0 && d <= 9);
List<byte> result = new List<byte>();
for (int i = 0; i < power; i++)
{
result.Add(0);
}
byte carry = 0; //进位
foreach (byte si in s)
{
System.Diagnostics.Debug.Assert(si >= 0 && si <= 9);
byte r = (byte)(si* d + carry);
byte m = (byte)(r % 10);
carry = (byte)(r / 10);
result.Add(m);
}
if (carry > 0)
{
result.Add(carry);
}
return result;
}
/**//// <summary>
/// 两个10进制序列相加
/// </summary>
/// <param name="s1">序列1</param>
/// <param name="s2">序列2</param>
/// <returns>相加后的序列</returns>
private static List<byte> Plus(List<byte> s1, List<byte> s2)
{
List<byte> result = new List<byte>();
int c1 = s1.Count;
int c2 = s2.Count;
if (c1 > c2)
{
for (int i = 0; i < c1 - c2; i++)
{
s2.Add(0);
}
}
else if (c1 < c2)
{
for (int i = 0; i < c2 - c1; i++)
{
s1.Add(0);
}
}
byte carry = 0; //进位
for (int i = 0; i < s1.Count; i++)
{
System.Diagnostics.Debug.Assert(s1[i] >= 0 && s1[i] <= 9);
System.Diagnostics.Debug.Assert(s2[i] >= 0 && s2[i] <= 9);
byte r = (byte)(s1[i] + s2[i] + carry);
byte m = (byte)(r % 10);
carry = (byte)(r / 10);
result.Add(m);
}
if (carry > 0)
{
result.Add(carry);
}
return result;
}
public static implicit operator DecimalNumber(string value)
{
List<byte> data = new List<byte>();
for (int i = value.Length - 1; i >= 0; i--)
{
data.Add(byte.Parse(value[i].ToString()));
}
return new DecimalNumber(data);
}
public static implicit operator DecimalNumber(int value)
{
System.Diagnostics.Debug.Assert(value >= 0);
return value.ToString();
}
public static DecimalNumber operator ++(DecimalNumber d)
{
return d + new DecimalNumber(new byte[] {1});
}
public static DecimalNumber operator +(DecimalNumber d1, int d2)
{
System.Diagnostics.Debug.Assert(d2 >= 0);
return d1 + d2.ToString();
}
public static DecimalNumber operator+(DecimalNumber d1, DecimalNumber d2)
{
return new DecimalNumber(Plus(d1.Data, d2.Data));
}
public static DecimalNumber operator*(DecimalNumber d1, DecimalNumber d2)
{
List<List<byte>> multiplicationSerial = new List<List<byte>>();
for (int i = 0; i < d1.Data.Count; i++)
{
multiplicationSerial.Add(Multiply(d2.Data, d1.Data[i], i));
}
List<byte> result = new List<byte>();
foreach(List<byte> s in multiplicationSerial)
{
result = Plus(s, result);
}
return new DecimalNumber(result);
}
public override string ToString()
{
StringBuilder str = new StringBuilder();
for (int i = _Data.Count - 1; i >= 0 ; i--)
{
str.Append(_Data[i].ToString());
}
return str.ToString();
}
}
class Program
{
static void Main(string[] args)
{
int d = 1;
DecimalNumber factorial = 1;
while (factorial.Length < 3)
{
d++;
factorial = factorial * d;
//Console.WriteLine(factorial);
//Console.WriteLine(d);
}
Console.WriteLine(d);
}
}
}
一个可进行加和乘操作且不限位数的十进制正整数类
时间: 2024-11-20 15:58:27
一个可进行加和乘操作且不限位数的十进制正整数类的相关文章
安卓开发中某一个界面还没等你操作呢 自己就没了 哪里出问题了?
问题描述 安卓开发中某一个界面还没等你操作呢 自己就没了 哪里出问题了? 问题如上 好困惑! 解决方案 自己就没了,是返回上一级页面么?还是什么?有可能是AndroidManifest.xml文件里activity配置的问题.. 解决方案二: 出现fatal crash了把,抓下log看看. 解决方案三: 贴出代码,贴出log,才好分析,这样描述太抽象 解决方案四: 看一下log日志,看看错误信息. 解决方案五: 这个问题问的有点抽象能不能再具体些
一个stmt多个rs进行操作引起的ResultSet已经关闭错误
错误 一个stmt多个rs进行操作.那么从stmt得到的rs1,必须马上操作此rs1后,才能去得到另外的rs2,再对rs2操作.不能互相交替使用,会引起rs已经关闭错误.错误的代码如下: stmt=conn.createStatement(); rs=stmt.executeQuery("select * from t1"); rst=stmt.executeQuery("select * from t2"); rs.last();//由于执行了rst=stmt.e
dynamic-如何根据第一个spinner来加载内容?
问题描述 如何根据第一个spinner来加载内容? 当在 com.example.bertin.HotelLocation.onItemSelected 上开启 FATAL EXCEPTION: main java.lang.NullPointer Exception 时,获得一个 Log Cat error. 是否是 onItemSelected 的错误呢.代码如下: package com.example.bertin; import android.app.Activity; import
MFC在登陆页面中 加一个显示验证码的控件应该加哪个?图片从一个网页中加载出来的
问题描述 MFC在登陆页面中 加一个显示验证码的控件应该加哪个?图片从一个网页中加载出来的 http://202.200.144.63/(gac14yvwcsjrzj45cx1fq4ed)/CheckCode.aspx 我想把这网页里的图片显示在登陆界面作为验证码,请问我该在对话框中加什么控件,我用的是下边的方法 CHtmlView* pView= (CHtmlView*)m_wndSplit.GetPane(0,1); pView->Navigate("http://hao.201201
mongodb-spring data mongo使用@DBRef,怎么执行一个类似sql中的join操作
问题描述 spring data mongo使用@DBRef,怎么执行一个类似sql中的join操作 解决方案 假设我要获取title,name两个字段,我该如何操作?翻了很多资料没好方法,, 解决方案二: 我这么操作,会获得User的所有字段,怎么获取指定字段呢? 我的操作是下面这样: @Query(value="{}", fields="{'title':1, 'user':1}") List<Archive> search(); 结果: [{&qu
spring mvc-Springmvc中如何设置登录一个账号长时间不进行操作 就会自动跳出登录页面?
问题描述 Springmvc中如何设置登录一个账号长时间不进行操作 就会自动跳出登录页面? Springmvc中如何设置登录一个账号长时间不进行操作 就会自动跳出登录页面? 解决方案 方法有很多种. 我推荐你用filter来做, filter作为验证用户提交的请求(当user==null时跳转) 而当前用户的登录信息放进session中即可, 长时间不操作会自动清除的. 解决方案二: shiro.设置超时 解决方案三: 配置文件里配置session时效 解决方案四: 把session设置一下时效
java-在Android中写一个浏览器,加载一个登录页面如何获取用户名和密码框
问题描述 在Android中写一个浏览器,加载一个登录页面如何获取用户名和密码框 在Android中写一个浏览器,记住密码功能怎么写?大神,请指教. 解决方案 webview加载你的登录页面,登录完了后取cookie或其他认证信息(这个和你登录的网站是如何设计的有关) 解决方案二: 用webview 啊 解决方案三: 用sharedpreference来保存密码或者是账号 解决方案四: 这两个输入框是浏览器的还是网页的?
c语言-一个数字间加空格问题
问题描述 一个数字间加空格问题 #include main() { int num1[4],num2[7],i; for(i=1;i<=4;i++) scanf("%d",&num1[i]); for(i=1;i<=4;i++) { num2[2*i-1]=num1[i]; num2[2*i]=' '; } for(i=1;i<=7;i++) printf("%d",num2[i]); return 0; } 我自己写的程序如上,比如输入8
游戏-刚刚接触directx不久,问大家一个关于directx加载纹理耗时和内存使用问题
问题描述 刚刚接触directx不久,问大家一个关于directx加载纹理耗时和内存使用问题 问大家一个关于使用directx开发2d游戏的问题,假如游戏中人物和怪使用的素材长宽都是512 32位的图片,人物包含头发.身体.和武器, 8方向行走64帧,攻击128帧,站立48帧 如果把一个人物所有的纹理都预先加载完需要使用的内存是 64MB+128MB+48MB=240MB如果是使用哪个加载哪个纹理,当前帧使用不到都清理掉那么卡帧很严重我这边测试平均创建一个纹理如果直接使用A8R8G8B8大概耗时