相关疑难解决方法(0)

如何获得int(C#)中的第一个数字?

在C#中,获取int中第一个数字的最佳方法是什么?我想出的方法是将int转换为字符串,找到字符串的第一个字符,然后将其转回int.

int start = Convert.ToInt32(curr.ToString().Substring(0, 1));
Run Code Online (Sandbox Code Playgroud)

虽然这可以完成这项工作,但感觉可能是一个很好的,简单的,基于数学的解决方案来解决这个问题.字符串操作感觉很笨重.

编辑:无论速度差异如何,mystring [0]而不是Substring()仍然只是字符串操作

c#

77
推荐指数
7
解决办法
9万
查看次数

获取int中的位数

如何检测整数的长度?如果我有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)

但大部分都是更简单的方式或更干净......

c c++

19
推荐指数
4
解决办法
4万
查看次数

按字典顺序排序C++的整数数组

我想按字典顺序对大量整数(比如说1个元素)进行排序.

例:

input [] = { 100, 21 , 22 , 99 , 1  , 927 }
sorted[] = { 1  , 100, 21 , 22 , 927, 99  }
Run Code Online (Sandbox Code Playgroud)

我用最简单的方法完成了它:

  • 将所有数字转换为字符串(非常昂贵,因为它将占用大量内存)
  • 使用std:sortstrcmp作为比较功能
  • 将字符串转换回整数

有没有比这更好的方法?

c++ arrays sorting lexicographic

18
推荐指数
4
解决办法
6758
查看次数

整数输入仅限于四位数

我在问一个问题,就是要求输入一个只包含四位数的帐号.这必须使用基本的初学者C++来完成.

我需要找出一种方法来将整数的输入限制为四位数.用户应该能够输入0043或9023或0001,它应该是可接受的值....

我想我知道如何使用字符串.... getline(cin,input)完成它然后检查input.length()== 4?

但是我不知道我怎么会用整数输入做这个.

c++ input

6
推荐指数
1
解决办法
2万
查看次数

在C++中获取int的十进制表示长度的最佳方法是什么?

什么是最好的写作方式

int NumDigits(int n);
Run Code Online (Sandbox Code Playgroud)

在C++中,它将返回输入的十进制表示中的位数.例如11-> 2,999-> 3,-1-> 2等.

c++

4
推荐指数
6
解决办法
1649
查看次数

我可以在C#中找到BigInteger的位数吗?

我正在解决这个问题,他们要求第一个斐波纳契数为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).我得到以下运行时间:

  • 原始方法:00:00:00.0961957
  • StringMethod:00:00:00.1535350
  • BigIntegerLogMethod:00:00:00.0387479
  • MaxLimitMethod:00:00:00.0019509

程序

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)

c# arrays biginteger

4
推荐指数
2
解决办法
1448
查看次数

在 C++ 中制作结构化(偶数)空间以显示数据

我创建了一个显示乘法表的程序:

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() 但它不起作用,因为它将它设置为所有数字,因此它只会使结果间隔更多一点。还有什么我可以尝试的吗?

c++

2
推荐指数
1
解决办法
50
查看次数

标签 统计

c++ ×5

arrays ×2

c# ×2

biginteger ×1

c ×1

input ×1

lexicographic ×1

sorting ×1