数字黑洞153的规律_黑洞数6174原理

数字黑洞153的规律_黑洞数6174原理6174数字黑洞计算的一个c#程序实现(原创)先上结果:两位数的数字黑洞(只有一组):09,81,63,27,45三位数的数字黑洞(只有一个):495四位数的数字黑洞(只有一个):6174五位数的数字黑洞(共三组):

6174数字黑洞计算的一个c#程序实现(原创)

先上结果:

两位数的数字黑洞(只有一组):

09,81,63,27,45

三位数的数字黑洞(只有一个):

495

四位数的数字黑洞(只有一个):

6174

五位数的数字黑洞(共三组):

第一组:74943,62964,71973,83952

第二组:63954,61974,82962,75933

第三组:53955,59994

六位数的数字黑洞(一组加两个):

第一组:,,,,,,

第二个:

第三个:

七位数的数字黑洞(只有一组):

,,,,,,,

八位数的数字黑洞(两组加两个):

第一组:,,

第二组:,,,,,,

第二个:

第三个:

九位数的数字黑洞(一组加两个):

,,,,,,,,,,,,,

第二个:

第三个:

十位数的数字黑洞(五组加三个):

第一组:,,

第二组:,,

第三组:,,

第四组:,,

第五组:,,,,,,

第六个:

第七个:

第八个:

再上界面:

再上代码:

public partial class MathQues : Form

{

static int calcuAmount=0;

public MathQues()

{

InitializeComponent();

}

private void calculate6174()

{

if (textBox1.Text == “”)

return;

bool isNumber = System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, @”^(-)?[1-9][0-9]*$”);

if (!isNumber)//不是整数

{

MessageBox.Show(“数字位数必须是整数!”); return;

}

this.Text = “正在进行 ” + textBox1.Text + ” 位数的6174变换,请勿中断程序运行!”;

DateTime bTime = DateTime.Now;

listBox2.Items.Add(“开始时间:” + bTime.ToString());

calcuAmount = 0;

kTransform();

label1.Visible = false;

textBox1.Visible = false;

button2.Visible = false;

saveToFile(bTime);

}

private void saveToFile(DateTime bTime)

{

listBox2.Items.Add(textBox1.Text + ” 位数共计算了 ” + calcuAmount.ToString() + ” 个数”);

DateTime eTime = DateTime.Now;

listBox2.Items.Add(“结束时间:” + eTime.ToString());

string dateDiff = null;

TimeSpan bts = new TimeSpan(bTime.Ticks);

TimeSpan ets = new TimeSpan(eTime.Ticks);

TimeSpan ts = ets.Subtract(bts).Duration();

dateDiff = ts.Days.ToString() + “天”

+ ts.Hours.ToString() + “小时”

+ ts.Minutes.ToString() + “分钟”

+ ts.Seconds.ToString() + “秒”;

listBox2.Items.Add(“耗时:” + dateDiff);

//保存到文本文件

SaveFileDialog saveFileDialog = new SaveFileDialog();

saveFileDialog.Filter = “文本文件 (*.txt)|*.txt”;

saveFileDialog.FilterIndex = 0;

saveFileDialog.RestoreDirectory = true;

saveFileDialog.Title = “导出数据到文本文件”;

string fileName;

if (saveFileDialog.ShowDialog() == DialogResult.OK)

fileName = saveFileDialog.FileName;

else

return;

FileStream fs = null;

fs = new FileStream(fileName, FileMode.Create);

StreamWriter txtWriter = new StreamWriter(fs, Encoding.GetEncoding(“GB2312”));

for (int i = 0; i < listBox2.Items.Count; i++)

{

txtWriter.Write(listBox2.Items[i].ToString());

txtWriter.Write(“\r\n”);

}

txtWriter.Flush();

txtWriter.Close();

}

private void kTransform()

{

double value = 0;

listBox1.Items.Clear();

listBox2.Items.Clear();

int NumberCount = Convert.ToInt16(textBox1.Text);//数字位数

string digitNumberStr = “”;

for (int i = 0; i < NumberCount; i++)

digitNumberStr = digitNumberStr + “1”;//11…11(位数那么多)

long limit = Convert.ToInt64(digitNumberStr) * 9;//计算循环上限

ArrayList list1 = new ArrayList();

long[] repeatNumbers = new long[8];

for (int i = 0; i < 8; i++)

{

int f = i + 1;

repeatNumbers[i] = Convert.ToInt64(digitNumberStr) * f;//得到所有重复数字

};

long step = (limit + 1) / 10;//上限加1除以十,作步长

int stepUnit = 1;

long start = step * stepUnit;

for (long i = start; i < limit; i++)

{

if (repeatNumbers.Contains(i) || i == 0)//排除完全重复的数值,排除对称数

{

stepUnit++; i = step * stepUnit;

}

value = i;

string str = addZero(value.ToString(), NumberCount);//补齐位数

str = sortReStr(str); //从大到小

if (!list1.Contains(str))//去掉排序后的重复值

list1.Add(str);

}

//只计算非重复值

for (int i = 0; i < list1.Count; i++)

{

string str = list1[i].ToString();

if (!listBox1.Items.Contains(str) && !listBox1.Items.Contains(sortStr(str)) && !listBox1.Items.Contains(sortReStr(str)))//本次计算出现

{

calcuAmount++;

calResault(str, NumberCount);//计算

}

}

}

//从小到大

private string sortStr(string str)

{

ArrayList listAsc = new ArrayList();

for (int i = 0; i < str.Length; i++)

listAsc.Add(str.Substring(i, 1));//数字分解开来

listAsc.Sort();//数字升序排序

str = “”;

for (int i = 0; i < listAsc.Count; i++)

str = str + listAsc[i].ToString();

return str;

}

//从大到小

private string sortReStr(string str)

{

ArrayList listAsc = new ArrayList();

for (int i = 0; i < str.Length; i++)

listAsc.Add(str.Substring(i, 1));//数字分解开来

listAsc.Sort();//数字升序排序

str = “”;

for (int i = 0; i < listAsc.Count; i++)

str = str + listAsc[listAsc.Count-1-i].ToString();

return str;

}

private void calResault(string originalValueStr, int NumberCount)

{

ArrayList list1 = new ArrayList();

string valueStr = originalValueStr;

listBox1.Items.Add(“第”+calcuAmount .ToString()+ “个(原始数据):” + valueStr);

for (; ; )

{

double value = calValue(valueStr, NumberCount);//得到新值

valueStr = addZero(value.ToString(), NumberCount);//排序并补齐位数

if (list1.Contains(valueStr)) //本次原始数据计算出现重复

{

getCircle(valueStr, list1, originalValueStr);//保存循环到listBox2

listBox1.Items.Add(“(新黑洞):”+ valueStr);//把重复值也保存到listBox1

return;//下一个数

}

//本次原始数据计算未出现重复

list1.Add(valueStr);//保存到list1

//若计算结果和之前某个原始数据或其计算过程出现过的数字等价?

if (listBox1.Items.Contains(valueStr) || listBox1.Items.Contains(sortStr(valueStr)) || listBox1.Items.Contains(sortReStr(valueStr)))

{

listBox1.Items.Add(“(旧黑洞):” + valueStr);

return;//返回计算下一个数

}

listBox1.Items.Add(valueStr);//否则保存到listBox1

}

}

private void getCircle(string str, ArrayList list1, string originalValueStr)

{

listBox2.Items.Add(“(“+originalValueStr + “变换的黑洞):”);

int start = 0;

for (int i = 0; i < list1.Count; i++)

{

if (list1[i].ToString() == str)

start = i;

}

for (int i = start; i < list1.Count; i++)

{

listBox2.Items.Add(list1[i].ToString());

}

listBox2.Items.Add(str);

}

//最前面补0

private string addZero(string valueStr, int NumberCount)

{

int count = valueStr.Length;

int diff = NumberCount – count;

string zero = “”;

for (long i = 0; i < diff; i++)

zero = zero + “0”;

valueStr = zero + valueStr;

return valueStr;

}

//把数字从大到小排序然后减去从小到大排序

private double calValue(string valueStr, int NumberCount)

{

ArrayList listAsc = new ArrayList();

for (int i = 0; i < NumberCount; i++)

listAsc.Add(valueStr.Substring(i, 1));//数字分解开来

listAsc.Sort();//数字升序排序

ArrayList listDesc = new ArrayList();

for (int i = 0; i < NumberCount; i++)

listDesc.Add(listAsc[NumberCount – 1 – i]);//倒过来

double newkValue = 0;

double revNewkValue = 0;

for (int j = 0; j < NumberCount; j++)

{

newkValue = newkValue + Math.Pow(10, j) * Convert.ToInt16(listDesc[NumberCount – j – 1].ToString());

revNewkValue = revNewkValue + Math.Pow(10, j) * Convert.ToInt16(listAsc[NumberCount – j – 1].ToString());

}

double resault = newkValue – revNewkValue;//大减小

return resault;

}

}

今天的文章
数字黑洞153的规律_黑洞数6174原理分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/61184.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注