在C#中,获取int中第一个数字的最佳方法是什么?我想出的方法是将int转换为字符串,找到字符串的第一个字符,然后将其转回int.
int start = Convert.ToInt32(curr.ToString().Substring(0, 1));
Run Code Online (Sandbox Code Playgroud)
虽然这可以完成这项工作,但感觉可能是一个很好的,简单的,基于数学的解决方案来解决这个问题.字符串操作感觉很笨重.
编辑:无论速度差异如何,mystring [0]而不是Substring()仍然只是字符串操作
如何检测整数的长度?如果我有le:int test(234567545);
我怎么知道int有多长?比如告诉我里面有9个数字???
我试过了 :
char buffer_length[100];
// assign directly to a string.
sprintf(buffer_length, "%d\n", 234567545);
string sf = buffer_length;
cout <<sf.length()-1 << endl;
Run Code Online (Sandbox Code Playgroud)
但大部分都是更简单的方式或更干净......
我想按字典顺序对大量整数(比如说1个元素)进行排序.
例:
input [] = { 100, 21 , 22 , 99 , 1 , 927 }
sorted[] = { 1 , 100, 21 , 22 , 927, 99 }
Run Code Online (Sandbox Code Playgroud)
我用最简单的方法完成了它:
std:sort
与strcmp
作为比较功能有没有比这更好的方法?
我在问一个问题,就是要求输入一个只包含四位数的帐号.这必须使用基本的初学者C++来完成.
我需要找出一种方法来将整数的输入限制为四位数.用户应该能够输入0043或9023或0001,它应该是可接受的值....
我想我知道如何使用字符串.... getline(cin,input)完成它然后检查input.length()== 4?
但是我不知道我怎么会用整数输入做这个.
什么是最好的写作方式
int NumDigits(int n);
Run Code Online (Sandbox Code Playgroud)
在C++中,它将返回输入的十进制表示中的位数.例如11-> 2,999-> 3,-1-> 2等.
我正在解决这个问题,他们要求第一个斐波纳契数为1000位的索引,我的第一个想法是类似于:
BigInteger x = 1;
BigInteger y = 1;
BigInteger tmp = 0;
int currentIndex = 2;
while (x.NoOfDigits < 1000)
{
tmp = x + y;
y = x;
x = tmp;
currentIndex++;
}
return currentIndex;
Run Code Online (Sandbox Code Playgroud)
但是,据我所知,没有方法可以计算BigInteger的位数.这是真的?绕过它的一种方法是使用BigInteger的.ToString().Length方法,但我被告知字符串处理很慢.
BigInteger也有一个.ToByteArray(),我想把BigInteger转换成一个字节数组并检查该数组的长度 - 但我不认为这唯一地决定了BigInteger中的位数.
为了它的价值,我实现了另一种解决方法,即手动将Fibonacci数存储在数组中,并在数组填满后立即停止,并将其与基于.ToString的方法进行比较,大约为2.5时间慢,但第一种方法需要0.1秒,这也似乎很长一段时间.
编辑:我已经在下面的答案中测试了这两个建议(一个是BigInteger.Log,一个是MaxLimitMethod).我得到以下运行时间:
程序
using System;
using System.Collections.Generic;
using System.Numerics;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Stopwatch clock = new Stopwatch();
clock.Start();
int index1 = Algorithms.IndexOfNDigits(1000);
clock.Stop();
var elapsedTime1 = …
Run Code Online (Sandbox Code Playgroud) 我创建了一个显示乘法表的程序:
for (int a=1; a<=10; a++)
{
cout << endl;
for (int b=1; b<=10; b++)
{
cout << " [" << a*b <<"] ";
}
}
Run Code Online (Sandbox Code Playgroud)
问题是它显示如下:
我尝试使用 setw() 但它不起作用,因为它将它设置为所有数字,因此它只会使结果间隔更多一点。还有什么我可以尝试的吗?